二十、繼承

1、繼承是類與類之間的關係
java中的繼承是單繼承
子類擁有父類所有的屬性和方法,private修飾的無效
實現代碼複用
class Dog extends Animal{
…………
}
2、方法重寫
如果子類對繼承父類的方法不滿意,可以重寫父類繼承的方法,當調用方法時會優先調用子類的方法

語法規則:返回值類型,方法名,參數類型及個數都要和父類繼承的方法相同。
3、繼承的初始化順序
初始化父類再初始化子類
先執行初始化對象中的屬性,在執行構造方法中的初始化
創建對象的時候,會先執行父類中的構造方法,在執行子類中的構造方法。
這裏寫圖片描述
3、final關鍵字
不可修改,不可變化
修飾類,則該類不允許被繼承
修飾方法,則該類方法不允許被重寫
修飾屬性,則該類的屬性不會進行隱式的初始化(類的初始化必須有值)或者在構造方法中賦值,但是隻能選擇其一。且只能賦一次值。
修飾變量,則該變量只能賦一次值,即變爲常量。
4、super關鍵字
在對象內部使用,可以代表父類對象
訪問父類的屬性:super.age
訪問父類的方法:super.方法()
在子類中訪問父類的屬性和方法,要在子類中創建一個方法,用super訪問父類。
super的應用
子類的構造過程當中必須強調用其父類的構造方法
public Dog(){
super();//隱式使用父類的構造方法,有沒有這一句都會調用父類的構造方法
System.out.println(“DOG”);
}
如果子類的構造方法中沒有顯式調用父類的構造方法,則系統默認調用父類無參的構造方法。
如果顯式調用父類的構造方法,必須放在子類構造方法的第一行
如果子類構造方法中既沒有顯式調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯。
(如果程序中有有參的構造方法,系統不會自動生成無參的構造方法)
5、Object類
<1>Object類是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類默認繼承Object類。
Object類中的方法,適合所有子類。
toString()方法
在Object類裏面定義toString()方法的時候返回的對象的哈希編碼(對象地址字符串)
可以通過重寫toString()方法標識出對象的屬性。

右鍵Source–Generate toString()

public class Telphone {

    /**
     * @param args
     */
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Telphone(){
        name="iphone";
    }
    @Override
    public String toString() {
        return "Telphone [name=" + name + "]";
    }//如果沒有這個方法,會輸出對象在內存中的地址com.imooc.Telphone@544a5ab2
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Telphone tel=new Telphone();
        System.out.println(tel);
    }
}
輸出Telphone [name=iphone]

<2>equals()方法
比較的是對象的引用是否指向同一塊內存地址。
一般情況下比較兩個對象時比較他的值是否一致,需要重寫equals()方法。

重寫equals()方法(右鍵Source–Generate hashcode() and equals())

@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())//得到類對象,new的時候叫類的對象。類對象和類的對象,類對象描述的是類的代碼信息,有哪些屬性類型,方法。類的對象關注的是數據信息,屬性的值的信息。
            return false;//兩個對象的類型是否相同
        Telphone other = (Telphone) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

Main()函數

Telphone tel=new Telphone();
        tel.name="ipone";
        Telphone tel2=new Telphone();
        tel2.name="ipone";
        if(tel.equals(tel2)){
            System.out.println("兩個對象是相同的");
        }else{
            System.out.println("不相同");
        }

輸出:兩個對象是相同的
如果換成“==”,輸出“不相同”
如果沒有重寫equals()方法,不管是用equals()還是==都是輸出“不相同”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章