簡體   English   中英

Java OOP:子類 - 對象如何使用超類中的方法(該方法已被覆蓋)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM