子類訪問父類成員super
訪問父類構(gòu)造方法
super(); --super調(diào)用構(gòu)造方法時,只能是第一句
super(name);
訪問父類屬性
super.name;
訪問父類方法
super.print();
不能被子類繼承的父類成員
private成員
構(gòu)造方法
image.png
多重繼承關(guān)系的初始化順序
1.父類屬性
2.父類構(gòu)造方法
3.子類屬性
4.子類構(gòu)造方法
class Person {
String name="李光";// 姓名
public Person() {
// super();//寫不寫該語句仿便,效果一樣
System.out.println("execute Person()");
}
public Person(String name) {
this.name = name;
System.out.println("execute Person(name)");
}
}
class Student extends Person {
String school="藍(lán)翔";// 學(xué)校
public Student() {
// super();//寫不寫該語句,效果一樣
System.out.println("execute Student() ");
}
public Student(String name, String school) {
super(name); // 顯示調(diào)用了父類有參構(gòu)造方法攒巍,將不執(zhí)行無參構(gòu)造方法
this.school = school;
System.out.println("execute Student(name,school)");
}
}
class PostGraduate extends Student {
String guide;// 導(dǎo)師
public PostGraduate() {
// super();//寫不寫該語句嗽仪,效果一樣
System.out.println("execute PostGraduate()");
}
public PostGraduate(String name, String school, String guide) {
super(name, school);
this.guide = guide;
System.out.println("execute PostGraduate(name, school, guide)");
}
}
class TestInherit {
public static void main(String[] args) {
PostGraduate pgdt=null;
pgdt = new PostGraduate();
System.out.println();
pgdt=new PostGraduate("劉小光","北京大學(xué)","王老師");
}
}
運(yùn)行結(jié)果:
execute Person()
execute Student()
execute PostGraduate()
execute Person(name)
execute Student(name,school)
execute PostGraduate(name, school, guide)
- 如果子類的構(gòu)造方法中沒有通過super顯式調(diào)用父類的有參構(gòu)造方法,也沒有通過this顯式調(diào)用自身的其他構(gòu)造方法柒莉,則系統(tǒng)會默認(rèn)先調(diào)用父類的無參構(gòu)造方法闻坚。在這種情況下,寫不寫“super();”語句兢孝,效果是一樣的窿凤。
- 如果子類的構(gòu)造方法中通過super顯式調(diào)用父類的有參構(gòu)造方法,那將執(zhí)行父類相應(yīng)構(gòu)造方法跨蟹,而不執(zhí)行父類無參構(gòu)造方法雳殊。
- 如果子類的構(gòu)造方法中通過this顯式調(diào)用自身的其他構(gòu)造方法,在相應(yīng)構(gòu)造方法中應(yīng)用以上兩條規(guī)則窗轩。
- 特別注意的是夯秃,如果存在多級繼承關(guān)系,在創(chuàng)建一個子類對象時品姓,以上規(guī)則會多次向更高一級父類應(yīng)用寝并,一直到執(zhí)行頂級父類Object類的無參構(gòu)造方法為止箫措。
class Car {
private int site = 4; //座位數(shù)
Car(){
System.out.println ("載客量是"+site+"人");
}
public void setSite(int site){
this.site = site;
}
void print(){
System.out.print("載客量是"+site+"人");
}
}
class Bus extends Car {
Bus(int site){
setSite(site);
}
}
public class Main {
public static void main(String[] args) {
// write your code here
Bus bus = new Bus(20);
bus.print();
}
}
運(yùn)行結(jié)果:
載客量是4人
載客量是20人
方法重寫
1.構(gòu)造方法因?yàn)椴荒鼙焕^承腹备,所以不能被重寫;
方法重寫的規(guī)則:
- 方法名相同
- 參數(shù)列表相同
- 返回值類型相同或者是其子類斤蔓;
- 訪問權(quán)限不能嚴(yán)于父類
抽象類
abstract也可用于方法——抽象方法
- 抽象方法沒有方法體
- 抽象方法必須在抽象類里
- 抽象方法必須在子類中被實(shí)現(xiàn)植酥,除非子類是抽象類
public abstract class Pet {
public abstract void print() {
//…
}
}
final用法
Penguin類不希望再被其他類繼承?
使用final類
方法不希望被重寫?
使用final方法
屬性值不希望被修改友驮?
使用常量
作者:豆約翰
鏈接:http://www.reibang.com/p/3bacbcb9bdec
來源:簡書
著作權(quán)歸作者所有漂羊。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處卸留。