[英]Java OOP: how subclass-object use method from superclass (that method has been Override)
我有這個例子:
public class Inheritance {
public static class Animal {
public void Scream() {
System.out.println("I'm an animal");
}
}
public static class Mammal extends Animal{
public void Scream(){
System.out.println("I'm a mammal");
}
}
public static class Tiger extends Mammal{
public void Scream(){
System.out.println("I'm a tiger");
}
}
public static void main (String[] args){
Animal tiger = new Tiger();
tiger.Scream();
}
}
當然,我會收到:“我是老虎”。 但是,我不知道如何打印“我是哺乳動物”或“我是動物”
@:請給我解答子問:萬一Tiger
級,什么是Tiger
超類。 Mammal
還是Animal
?
請幫我 :)
謝謝 ::)
這是代碼示例:
public class Inheritance {
public static class Animal {
public void Scream() {
System.out.println("I'm an animal");
}
}
public static class Mammal extends Animal{
public void Scream(){
super.Scream();
System.out.println("I'm a mammal");
}
}
public static class Tiger extends Mammal{
public void Scream(){
super.Scream();
System.out.println("I'm a tiger");
}
}
public static void main (String[] args){
Animal tiger = new Tiger();
tiger.Scream();
}
}
在方法重寫中,java將始終檢查在運行時創建了哪些對象。 如果你想打印“我是哺乳動物”:
Animal m = new Mammal();
m.Scream();
這將印刷“我是一個哺乳動物”。
如果你想打印“我是動物”:
Animal a = new Animal();
a.Scream();
Java不像c ++那樣可能。
您可以在每個scream方法中調用super.scream(),但它會同時顯示:
“我是一個哺乳動物”和“我是一個動物”。
我不確定你為什么要那樣做。
要打印“我是哺乳動物”,你應該成為哺乳動物類的對象。
public static void main (String[] args){
Animal mammal = new Mammal();
mammal.Scream();
}
要打印“我是動物”,你應該制作一個Animal類的對象。
public static void main (String[] args){
Animal animal = new Animal();
animal.Scream();
}
注意:在上述兩種情況下,引用變量仍為Animal。
1)正如其他人已經說過的那樣,如果你想從超類中調用重寫方法,請調用super.Scream()
。 您將獲得以下輸出:
I'm an animal
I'm a mammal
I'm a tiger
2)Tiger實現了哺乳動物,因此哺乳動物是Tiger的超類,而且由於Animal是Mammal的超類,Tiger也實現了Animal。 換句話說:老虎的超級班級是老虎和動物。
// all of this is valid:
Tiger tiger = new Tiger();
Mammal mammal = tiger;
Animal animal = tiger;
如果你調用animal.Scream()
,虛擬機知道anmial
是Tiger類型並調用Tiger類中聲明的scream方法。 見多態性 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.