编辑代码

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);
    }


    
}