java物件導向繼承
繼承體現的就是兒子繼承父親的特徵和一些方法,徒弟繼承師傅的手藝等,程式中,多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類就無需多定義這些屬性和行為。
格式:
class 子類名 extends 父類名{}
繼承的優點:1.提高了程式碼的複用性
2.提高了程式碼的維護性
3.繼承是多型的前提
繼承的缺點:類的耦合性增強了,耦合性就是類魚類之間的關係更密切的意思,就是如果想要改某個功能就需要考慮其他類適不適應,不利於後期程式碼維護和擴充套件。
注意:1.繼承是單繼承不能多繼承可以多層繼承
2.繼承不能繼承父類私有的方法
3.繼承不能繼承父類的構造方法
4.不要為了部分功能去繼承
java繼承中構造方法的關係
子類所有的構造方法都會預設訪問父類的空參構造方法
因為子類繼承父類中的資料,可能還會使用父類的資料,所以,子類初始化之前,一定會完成父類的初始化
其實每一個構造方法的預設第一句都是super();
super:代表的是父類的儲存空間的標識,可以用super關鍵字呼叫父類的成員變數、成員方法,還有父類的構造方法
class A{
int num=10;
public A(){
System.out.println(num);
}
}
class B extends A{
int num=20;
public B(){
System.out.println(num);
}
public B(int x){
int y=x+num;
System.out.println(y);
}
}
class MyTest{
public static void main(String[] args){
B b=new B();
B b=new B(100);
}
}
上述程式碼執行結果是10 20 10 120 在這裡要說一下子類和父類同名的成員變數該如何訪問。
採取的就是就近原則,比如在子類中訪問一個變數的查詢順序
1.在子類方法區域性範圍查詢,有就使用
2.在子類的成員範圍找,有就使用
3.在父類中的成員範圍找,有就使用
4.如果還找不到,就報錯
java重寫
當子類需要父類的功能,但是功能主體子類有自己特有內容時,可以重寫父類中的方法,這樣就可以沿襲了父類的功能,又定義了子類的特有的內容
重寫格式: 就是在子類寫和父類一摸一樣的方法宣告(方法名,形參,返回值型別)
注意:1.父類中私有方法不能被重寫
2.子類不能重寫父類的構造方法
3.子類重寫父類時,訪問許可權不能更低(最好一致)
4.靜態方法不參與重寫
public class Animal {
String name;
int age;
public void run(){
System.out.println("僅僅跑步");
}
public void eat(){
System.out.println("吃飯飯");
}
}
public class Cat extends Animal {
public Cat(String name,int age){
this.name=name;
this.age=age;
}
public void run() {
super.run();
}
public void eat() {
System.out.println(this.name+"吃魚");
}
}
public class MyTest {
public static void main(String[] args) {
Cat cat = new Cat("小貓",3);
System.out.println("我的寵物叫:"+cat.name+","+cat.age+"歲了");
cat.run();
cat.eat();
}
}
上述程式碼執行結果是我的寵物叫 小貓,3歲了 僅僅跑步 小貓吃魚
注意方法過載和重寫的區別:
過載:一個類中有多個同名的方法,但引數個數或引數型別不同
重寫:子類重寫父類的方法,必須和父類具有一樣的方法宣告(方法名,形參,返回值型別)