語法:子類的名字extends 父類的名字
父類
package com.company;
public class UncleOne extends Uncle{
public void chouyan(){
System.out.println("大舅抽煙");
}
public void fahongbao(){
System.out.println("");
}
}
子類:
package com.company;
public class UncleTwo extends Uncle{
public void hejiu(){
System.out.println("二舅000");
}
// 方法的重寫 復寫 覆寫
public void fahongbao(){
System.out.println("二舅送");
}
}
1.子類能夠繼承到父類所有的不是的私有屬性和方法
2.子類能夠復寫父類的方法,如果沒有復寫,調用的是父類的方法,子類一旦復寫,優先調用復寫后的子類方法
3.除了復寫,子類可以擴充父類沒有的方法
優點:
1.實現代碼的復用
2.有利于子類代碼的擴展
多層繼承
public class Uncle {
private String name;
private int age;
public void fahongbao(){
System.out.println("舅舅發紅包");
}
}
public class UncleOne extends Uncle{
public void chouyan(){
System.out.println("大舅抽煙");
}
public void fahongbao(){
System.out.println("大舅發紅包");
}
}
public class UncleOneSon extends UncleOne{
public void fahongbao(){
System.out.println("大舅的兒子");
}
}
類繼承的加載順序
先加載父類,在加載子類
祖先類的構造方法最先執行,祖先類最早被創建出來,其次是父類,最后是子類
在構造方法當中會隱性的調用super()超類 父類的無參構造方法
final 最終的 最后的
被final修飾的成員不可以被改寫
-
final修飾的變量值不能發生修改 PI=3.1415
修飾基本數據類型,氣質不能發生改變;修改引用數據類型,例如數組,數組中的值可以發生修改,但是數組名不能指向新的空間
final修飾的方法不能被重寫
final修飾的類不能被繼承
多態
一個父類有多個子類
把子類的對象賦值給父類的過程叫做向上轉型
把父類的對象賦值給子類的過程叫做向下轉型
語法:
正常語法:
類名 對象名 = new類名();
向上轉型:
父類的類型 對象名 = new 子類的類名();
向下轉型:
子類類型 對象名 = (子類類型) 父類的對象
// 向上轉型
Uncle uncleOne1 = new UncleOne();
uncleOne1.fahongbao();
Uncle uncleTwo2 = new UncleTwo();
uncleTwo2.fahongbao();
//向下轉型
Uncle uncle = new Uncle();
UncleOne temp =(UncleOne) uncle;
instanceof
判斷對象是否是一個類的實例(具體的對象)
public class Demo02 {
public static void main(String[] args) {
UncleOne dajiu = new UncleOne();
ganhuo(dajiu);
UncleTwo erjiu = new UncleTwo();
ganhuo(erjiu);
}
public static void ganhuo( Uncle uncle){
if ( uncle instanceof UncleOne){
System.out.println("出門外干活");
}else if( uncle instanceof UncleTwo){
System.out.println("在室內干活");
}else {
System.out.println("傳入的不是舅舅,老太太沒辦法");
}
}
}