語(yǔ)法:子類的名字 extends 父類的名字
父類
public class Uncle {
? ? private String name;
? ? private int age;
? ? public void faHongbao () {
? ? ? ? System.out.println("舅舅發(fā)紅包");
? ? }
}
子類一:
public class UncleOne extends Uncle {
? ? public void chouyan() {
? ? ? ? System.out.println("大舅喜歡抽煙");
? ? }
? ? public void faHongbao() {
? ? ? ? System.out.println("大舅家道中落,發(fā)不起紅包了,該送祝福了");
? ? }
}
子類二:
public class UncleTwo extends Uncle {
? ? public void hejiu() {
? ? ? ? System.out.println("二舅喜歡喝酒");
? ? }
? ? // 方法的重寫 復(fù)寫 覆寫
? ? public void faHongbao() {
? ? ? ? System.out.println("二舅不僅發(fā)紅包,還送茅臺(tái)");
? ? }
}
1 子類能夠繼承到父類所有的不是的私有的屬性和方法
2 子類能夠復(fù)寫父類的方法,如果沒(méi)有復(fù)寫,調(diào)用的是父類的方法,子類一旦復(fù)寫,優(yōu)先調(diào)用復(fù)寫后的子類方法
3 除了復(fù)寫,子類可以擴(kuò)充父類沒(méi)有的方法
優(yōu)點(diǎn):
1 實(shí)現(xiàn)代碼的復(fù)用
2 有利于子類代碼的擴(kuò)展
多重繼承 不允許 語(yǔ)法錯(cuò)誤
public class Temp extends UncleOne , UncleTwo{
}
多層繼承
public class Uncle {
? ? private String name;
? ? private int age;
? ? public void faHongbao () {
? ? ? ? System.out.println("舅舅發(fā)紅包");
? ? }
}
public class UncleOne extends Uncle {
? ? public void chouyan() {
? ? ? ? System.out.println("大舅喜歡抽煙");
? ? }
? ? public void faHongbao() {
? ? ? ? System.out.println("大舅家道中落,發(fā)不起紅包了,該送祝福了");
? ? }
}
public class UncleOneSon extends UncleOne{
? ? public void faHongbao () {
? ? ? ? System.out.println("大舅的兒子厲害了,接著發(fā)紅包");
? ? }
}
類繼承的加載順序
先加載父類,再加載子類
祖先類的構(gòu)造方法最先執(zhí)行,祖先類最先被創(chuàng)建出來(lái),其次是父類,最后是子類
在構(gòu)造方法當(dāng)中會(huì)隱性的調(diào)用super() 超類 父類的無(wú)參構(gòu)造方法
final? 最終的 最后的
被final修飾的成員不可以被改寫
1 final修飾的變量值不能發(fā)生修改 PI= 3.1415
修飾基本數(shù)據(jù)類型,其值不能發(fā)生改變;修改引用數(shù)據(jù)類型,例如數(shù)組,數(shù)組中的值可以發(fā)生修改,但是數(shù)組名不能指向新的空間
2 final修飾的方法不能被重寫
3 final修飾的類不能被繼承