class Main {
public static void main(String[] args) {
// super() 的使用细节
B b=new B();
b.sum();
}
}
class A{ // 父类
// 4个属性
public int n1=100;
protected int n2=200;
int n3=300;
private int n4=400;
public A(){}
public A(String name){}
public A(String name,int age){}
public void cal(){
System.out.println("A类的cal()方法...");
}
}
class B extends A{ // 子类
public int n1=800;
//访问父类的属性,但不能访问父类的private屈性【案例]super.屈性名
public void hi(){
System.out.println(super.n1+""+super.n2+""+super.n3);
}
public void sum(){
System.out.println("B类的sum()");
//希望调用父类-A 的cal方法
//这时,因为子类B没有cal方法,因此我可以使用下面三种方式
//找cal方法时,顺序是
//先找本类,如果有,并且可以调用,则调用
//如果没有,则找父类,如果有,并且可以调用,则调用
//如果父类没有,则找父类的父类,整个规则,就是一样的,直到Object类
//提示:如果查找方法的过程中,找到了,但是不能访问,则报错
// 如果查找方法的过程中,没有找到,则提示方法不存在
cal();
//this.cal(); // 等价 cal()
//super.cal(); // 找cal方法的顺序是直接查找父类,其他的规则一样
// 演示访问属性的规则
// n1 和 this.n1 查找的规则是:
//(1)先找本类,如果有,则调用
//(2)如果没有,则找父类(如果有,并可以调用,则调用)
//(3)如果父类没有,则继续找父类的父类,整个规则,就是一样的,直到0bject类
//提示:如果查找方法的过程中,找到了,但是不能访问,则报错,cannot access
// 如果查找方法的过程中,没有找到,则提示方法不存在
System.out.println(n1);
System.out.println(this.n1);
// super.n1 的顺序是直接访问父类的n1,其他规则一样
System.out.println(super.n1);
}
}