亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請解釋一下這種情況下的Java繼承

請解釋一下這種情況下的Java繼承

慕森王 2024-01-05 10:14:12
我正在學習Java,無法理解繼承的一些技巧。例子:我們有一個班級Animal;我們有一個類Cat,擴展Animal;我們有一個類Tiger,擴展Cat;問題:1)為什么Cat使用Tigers方法?請參閱下面的“make_a_sound”方法示例。它來自 Tiger,但 Cat 可以使用它。2)為什么Cat看不到Tiger的任何屬性?貓可以使用老虎的方法“make_a_sound”,但看不到它的屬性......很奇怪。謝謝,根納迪public class Solution {    public static void main(string[] args) {        Cat cat = new Tiger();        // The result is from Tiger class: A tiger says RRRRR & new tiger property        // Why???        cat.make_a_sound();        // Only cat's and Animal's properties are visible. No Tiger's properties        System.out.println(cat.this_is_a_cat);    }    // Base class    public class Animal {        public String this_is_an_animal = "Animal";        public void make_a_sound() {            System.out.Printf("I'm an animal");        }    }    // Extends base class    public class Cat extends Animal {        public String this_is_a_Cat = "Hi, I'm a cat";        public void make_a_sound() {            System.out.Printf("A cat says meey");        }    }    // Extends prev. class    public class Tiger extends Cat {        public String this_is_a_Tiger = "Tiger";        public void make_a_sound() {            System.out.Println("A tiger says RRRRRR");            this_is_a_Tiger = "new tiger property";            System.out.println(new_tiger_property);        }    }}
查看完整描述

3 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

您定義cat為 type Cat。這意味著cat可以做任何其他人可以做的事情Cat。該Animal對象確實定義了該make_a_sound函數,因此它可用于所有Animal實例。當您運行代碼時,該變量cat指向一個Tiger實例,因此當make_a_sound被調用時,它就是運行的實例Tiger。這就是繼承的全部意義。


對于你的第二個問題,cat是類型,Cat所以你只能用它做你可以用任何Cat對象做的事情。由于this_is_a_Tiger不是每個對象都有的東西,所以即使Cat它確實指向.catcatTiger


但你可以這樣做:


if (cat instanceof Tiger) {

   Tiger tiger = (Tiger)cat;

   System.out.println(tiger.this_is_a_Tiger);

}


查看完整回答
反對 回復 2024-01-05
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

此鏈接可以為您提供一些有關Java 中 覆蓋的概念: https ://www.geeksforgeeks.org/overriding-in-java/

為了簡單起見,Overriding僅對方法有效(關于問題1),而不對字段變量有效(關于問題2)。


查看完整回答
反對 回復 2024-01-05
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

  1. 為什么Cat使用Tigers方法?請參閱下面的“make_a_sound”方法示例。它來自 Tiger,但 Cat 可以使用它。

回答)因為當你說 Cat cat = new Tiger() 時,你并不是說任何貓,而是說你想要老虎的聲音,而不是任何通用的貓。Tiger 通過覆蓋實現來使用貓的“make_a_sound”方法猛虎聲響。

如果你沒有覆蓋 Tigers 的“make_a_sound”方法,那么 Cat 的“make_a_sound”方法將被調用。你可以通過在 Tiger 類中使用 super().make_a_sound 或刪除此方法的實現來嘗試。

2)為什么Cat看不到Tiger的任何屬性?貓可以使用老虎的方法“make_a_sound”,但看不到它的屬性......很奇怪。

回答)如果父類知道子類的一切,那么 OOPS 就會被破壞。在 OOPS 中,每個類應該只知道它做什么,而不知道其他的。它不關心其他類的責任。


查看完整回答
反對 回復 2024-01-05
  • 3 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號