1.super和this的區別
super呼叫的是父類的屬性或方法,this是呼叫當前類的屬性或者方法, (1)super和this關于屬性的呼叫
(2)super和this關于方法的呼叫

(3)代表的物件不同:
this:代表本身呼叫者這個物件
super:代表父類物件的參考
(4)使用前提條件不同:
this:在沒有繼承關系中也可以使用
super:只能在繼承條件下才可以使用
(5)構造方法:
this:默認呼叫本類的構造器
super:默認呼叫的是父類的構造器
2.構造器在繼承中的呼叫順序


3.有參無參在繼承中的注意點
下圖子類無參構造報錯的原因是:當父類寫了有參構造器而沒有顯示定義無參構造器,則父類的有參構造器會自動干掉其無參構造器,而子類無參構造器在使用前會先呼叫父類的無參構造器,父類的無參被有參干掉,導致子類也無法使用無參構造器,
以上錯誤有兩種解決方法:
(1)父類中重寫了有參構造器之后,顯示定義無參構造器
(2)在子類中呼叫父類的有參構造即可,如下圖:
注:若在子類中不顯示寫super則默認呼叫的是無參構造,在父類重寫有參構造器的前提下,想要不報錯,父類中必須顯示定義無參構造器

4.super在使用時的注意點
(1)當super呼叫父類的構造方法時必須在子類構造方法的第一行, (2)super只能出現在子類的方法或構造方法中, (3)super和this不能同時呼叫構造方法,因為這兩都必須要在構造方法的第一行,因此不能同時在構造方法中使用,點擊查看代碼
package com.Tang.oop.demo05;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test("唐");
System.out.println("=============");
student.test1();
}
}
package com.Tang.oop.demo05;
//子類繼承父類之后,就會擁有父類的全部方法
public class Student extends Person{
public Student() {
super("Twq");//影藏了super代碼:呼叫了父類的無參構造
System.out.println("Student無參構造執行了");
}
private String name="Twq";
public void print(){
System.out.println("Student");
}
public void test1(){
print();//Student
this.print();//Student
super.print();//Person
}
public void test(String name){
System.out.println(name);//唐
System.out.println(this.name);//Twq
System.out.println(super.name);//jianduan
}
}
package com.Tang.oop.demo05;
public class Person {
public Person(){
}
public Person(String name) {
System.out.println("Person無參構造執行了");
}
protected String name="jianduan";
public void print(){
System.out.println("Person");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498579.html
標籤:Java
上一篇:java之List集合入門必備篇
下一篇:聊聊訊息中心的設計與實作邏輯
