Java初学6-4 - super关键字
Super代表父类的引用,用于访问父类的方法,属性,构造器。
package ExtendsTest;
public class ExtendsSuper {
public static void main(String[] args) {
SubTest subTest = new SubTest();
subTest.SuperTest05();
subTest.Test1000();
SubTest subTest001 = new SubTest(18);
}
}
class SuperTest{
int n1=1;//
public int n2=2;
protected int n3=3;
private int n4=4;
public SuperTest() {
System.out.println("父类的无参构造器!");
}
public SuperTest(String n){
System.out.println("父类的有参构造器!");
}
void SuperTest01(){
System.out.println("SuperTest01");
}
public void SuperTest02(){
System.out.println("SuperTest02");
}
protected void SuperTest03(){
System.out.println("SuperTest03");
}
private void SuperTest04(){
System.out.println("SuperTest04");
}
public void Test(){
System.out.println("SuperTest的Test方法。");
}
}
class SubTest extends SuperTest{
public int n1=2024;
public void SuperTest05(){
//super可以访问父类的属性,但是不能访问私有的属性!
//格式:super.属性名。
System.out.println(super.n1);
System.out.println(super.n2);
System.out.println(super.n3);
//System.out.println(super.n4);//错误
//同样地,方法也遵循!
//格式:super.方法名(形参列表)
super.SuperTest01();
super.SuperTest02();
super.SuperTest03();
//super.SuperTest04();//错误
}
//调用父类的构造器,并且只能放在第一行:
public SubTest(){
super();//只能在第一行!!!
}
public SubTest(int a){
super("哈哈哈哈");//只能在第一行!!!
}
/* public void Test(){
System.out.println("SubTest的Test方法。");
}*/
public void Test1000(){
System.out.println("SubTest的Test1000方法。");
//如何调用SuperTest中的Test方法呢?
Test();//1.先找SubTest,有就调用,没有则找父类。存在且!!!非私有!!!,就调用。以此类推。
super.Test(); //2.直接查找父类,子类即使有也不访问。不限于直接父类,可以一直向上查找,直到找到为止。
this.Test(); //3.等价于Test();
//同样地适用于属性。
System.out.println(n1);
System.out.println(this.n1);
System.out.println(super.n1);//不限于直接父类,可以一直向上查找,直到找到为止。
}
}