super用於子類呼叫父類方法(private保護的方法除外)
子類預設會呼叫父類的無參構造器(在子類無參構造器的第一行中應為super())
1、注意如果父類定義了有參構造器那麼子類便無法呼叫預設的無參構造器,解決方法應當給父類寫出顯式的無參構造器,或者子類呼叫父類構造器時新增引數super(引數);
super的注意點:
1、super呼叫父類的構造方法,必須寫在構造方法的第一行。
2、super必須只能能出現在子類的方法或者構造方法中
3、super和this不能同時呼叫構造方法。
super與this的區別
1、代表的物件不同
this:本身呼叫者這個物件
super:代表父類物件的應用
this:沒有繼承也能用
super:只能在繼承中使用
構造方法的區別
this():本類的構造
super():父類的構造
程式碼解析
//執行方法
public class application {
public static void main(String[] args) {
/*Demo09 student= new Demo09();
student.setName("dalao");
student.setAge(1000);//不合法資料
System.out.println(student.getName()+"年齡"+student.getAge());//println屬於方法的過載
student.setAge(68);//合法資料
System.out.println(student.getAge());//println屬於方法的過載
*/
Demo11 student = new Demo11();
student.test01("小明");
student.test02();
}
}
//父類方法
public class Demo10 /*extends Object*/{
public Demo10(){
System.out.println("父類無參構造器已執行");
}
protected String name="小明同學";
public void print(){//假如此處改為private私有其實也可繼承只不過應當使用類如get,set方法來訪問子類不能直接呼叫
System.out.println("我是父類");
}
}
//子類方法
public Demo11(){
super();//子類會預設呼叫父類的無參構造器
System.out.println("子類無參構造器已執行");
//super();而且呼叫父類無參構造器必須放在程式碼第一行
}
private String name ="xiaomingtongxue";
public void test01(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
public void print(){
System.out.println("我是子類");
}
public void test02(){
print();
this.print();
super.print();
}
結果
父類無參構造器已執行
子類無參構造器已執行
小明
xiaomingtongxue
小明同學
我是子類
我是子類
我是父類