Java學習 11.17
阿新 • • 發佈:2021-11-17
1.1 為什麼要使用繼承
我們使用物件用來儲存資料,要想使用物件首先得有類。在一個專案中,可能有很多資料需要我們儲存
例如:儲存狗的資訊 貓的資訊 人的資訊 等等 不同的資訊需要不同的類去建立不同的物件
假如現在需要建立狗類 : 編號 名字 價格 貓類:編號 名字 品種
此時你就去完成這個操作
public class Dog {
int id;
String name;
double price;
}
public class Cat {
int id;
String name;
String type;
}
當你完成了,過了很久,此時需要把 id 和 name 換成animalID animalName
此時你需要一個一個的都換(假如有一萬個)
public class Dog {
int animalID;
String animalName;
double price;
}
public class Cat {
int animalID;
String animalName;
String type;
}
這個操作太麻煩(不嫌棄麻煩的 面向過程思想 java是一種面嚮物件語言-java支援面向物件思想的那些語法)所以我們需要優化一波
所以我們希望達到的效果: 建立狗類 : 編號 名字 價格 貓類:編號 名字 品種 並且後期如果要修改 改一次全都改完
所以他們就創造了一個語法 能滿足你的需求 後來將這個語法命名為 繼承
1.2 使用繼承語法解決問題
A 建立一個新的類 Animal
B 在Animal中新增成員變數 (多個類共有的)
C 狗貓不再寫 id name 共有的內容
D 狗貓繼承於Animal
public class Animal {
int id;
String name;
}
public class Cat extends Animal{
String type;
}
public class Dog extends Animal{
double price;
}
public class JavaTest {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.id = 666;
d1.name = "旺財";
d1.price = 66645;
Cat c1 = new Cat();
c1.id = 777;
c1.name = "威廉";
c1.type = "狸花貓";
}
}
1.3 記憶體模型
1.4 繼承語法規則
1 繼承使用 extends 關鍵字
public class Cat extends Animal{
String type;
}
2 java中類的關係(提問:java中是單繼承還是多繼承)
類 類 繼承關係 單繼承
類 介面 實現關係 多實現 (彌補java單繼承的侷限性 因為java剛造出來的時候 吹牛說 我們基於c++並且摒棄了c++中晦澀難懂的多繼承多指標的概念)
介面 介面 繼承關係 多繼承
Class cannot extend multiple classes
public class Cat extends Animal,People{
String type;
}
3 類和類之間建立繼承關係 則子類可以訪問父類許可權達到的內容
提問:私有的可以被繼承嗎?
不可以 因為私有的無法被子類訪問 可以 但是私有的不能被子類訪問
4 一個類不寫extends 預設繼承Object(祖宗類 基類 超類)
驗證規則:Animal沒有寫繼承 但是可以呼叫notify () 此時證明其繼承於Object
public static void main(String[] args) {
Animal a1 = new Animal();
a1.notify();
}
提問: Object 有哪些函式 各自的作用
/**
* Class {@code Object} is the root of the class hierarchy.
* Every class has {@code Object} as a superclass. All objects,
* including arrays, implement the methods of this class.
*
* @author unascribed
* @see java.lang.Class
* @since JDK1.0
*/
public class Object {}
5 子類和父類函式呼叫順序:本類有先呼叫本類的 本類沒有則呼叫父類的
此時就有疑問了,繼承本來就是父類有 子類可以直接用,現在有一個問題?父類有一個eat函式 子類為什麼還要有一個eat函式? (為什麼需要重寫 或者說 什麼時候重寫)
在java中 父類有了 子類如果再寫一個一樣的稱之為 函式的重寫 英文名字 voerride
父類的函式滿足不了子類的需求 所以子類可以對父類函式進行重寫 此時呼叫順序就起作用了
public static void main(String[] args) {
Animal a = new Animal();
a.id = 666;
a.name = "阿斯蒂芬";
System.out.println(a);
}
此時我們輸出a 列印的是com.aaa.day02.test4.Animal