1.super和this的區別 super調用的是父類的屬性或方法,this是調用當前類的屬性或者方法。 (1)super和this關於屬性的調用 (2)super和this關於方法的調用 (3)代表的對象不同: this:代表本身調用者這個對象 super:代表父類對象的引用 (4)使用前提條件不 ...
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");
}
}