繼承: 子類繼承父類後,子類中就擁有了父類中所有的非私有成員;
使用關鍵字extends;
public class Fu{
int a = 100;
private int b = 200;
}
public class Zi extends Fu{
// int a = 100;
int c = 300;
public void method01(){
...
}
}
特點:
1.只有單繼承
2.多層繼承
———第二天 —-面向對象【重寫、this、super,抽象類】——————–
1.方法的重寫
1.在子類中定義一個方法,與父類中的方法一樣;
2.父類中的私有方法時不能被繼承的.
3.通過子類對象調用方法時,系統會先去子類中查找這個方法,如果找到了就執行,如果沒有找到就去父類中查找,然後執行.
重寫方法的原因:
從父類中繼承的方法不能滿足子類的需要;
父類:superclass
子類:subclass
**只能重寫父類中非私有的方法;
2.重寫方法的注意事項
1.子類中方法中權限必須大於或者等於父類中方法的權限;
在java中有四大權限:
public(公共的,共用的)-protected(受保護的)-default(默認的)-private(私有的)
從左向右依次變小;
3.重寫變量
在父類中定義變量,這個變量與父類中變量一樣;
會覆蓋父類中的這個變量;
只能重寫父類中非私有的變量;
4.this關鍵字
表示當前類的對象;
哪個對象正在調用this所在的方法,this就表示哪個對象;
this();表示調用無參的構造方法;
this的用法或者作用:
1.用來標記當前變量是成員變量的;
2.在構造方法中調用本類的其它構造方法;
3.調用本類中的成員變量或者方法;
5.super關鍵字
表示父類對象;
super的用法或者作用:
1.可以在子類中通過super關鍵字調用父類中的成員變量或者成員方法;
示例代碼:
public class Zi extends Fu {
int a = 200;
// 1.可以在子類中通過super關鍵字調用父類中的成員變量或者成員方法;
public void method01() {
// 打印子類中的a=200
System.out.println(a);
// 打印父類中的a=100
System.out.println(super.a);
// 調用父類中的method01方法
super.method01();
}
}
2.可以在子類的構造方法中通過super關鍵字調用父類的構造方法;
在子類的構造方法中默認調用父類的無參構造方法,即使沒有寫super();默認也會調用父類中有無參的構造方法;前提是父類中有無參的構造方法;
示例代碼:
public Zi() {
// 2.可以在子類的構造方法中通過super關鍵字調用父類的構造方法;
super(); // 相當於Fu(); 調用父類中的無參構造方法
System.out.println("Zi類的構造方法....");
}
public Zi(int a) {
// 2.可以在子類的構造方法中通過super關鍵字調用父類的構造方法;
super(a); // 相當於Fu(); 調用父類中的無參構造方法
this.a = a;
}
注意事項:
this(參數列表)和super(參數列表)這兩種寫法不能同時寫在子類的構造方法中;
6.抽象類的定義格式
public abstract class 類名{
....
}
抽象類不能創建對象,也就是不能new.
7.抽象方法的定義格式
public abstract 返回值類型 方法名(參數列表);
抽象方法不能被調用;
定義抽象方法的目的:在父類中定義功能的名字,讓子類實現這個功能;
8.抽象類的使用
抽象類不能創建對象,也就是不能new.
抽象方法不能被調用;
怎麼使用:
1.定義一個類,繼承抽象類,然後實現抽象類中所有的抽象方法;
怎麼在子類中實現抽象類中的抽象方法:
1.從父類中拷貝抽象方法,粘貼到子類中;
2.刪除abstract關鍵字;
3.添加方法體;
2.創建子類對象;
3.通過子類對象調用重寫後的方法;
注意事項:
1.抽象類中可以定義抽象方法,也可以定義多個抽象方法,也可以不定義抽象方法;
(如果抽象類中沒有定義抽象方法,是爲了不讓其他人創建這類的對象;)
2.抽象類中可以定義普通的變量和方法;
3.子類必須實現抽象父類中所有的抽象方法,如果沒有全部實現抽象方法,要求這個子類必須定義成抽象類;