关键字-super

super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

    
    String name;
    int age;
    
    void value(){
        name = "张三";
        age = 20;
    }
}

class UserAction extends BaseAction{
    
}

class Main extends UserAction{
    
    String name;
    int age;
    
    public static void main(String[] args){
        Main m = new Main();
        m.value();
    }
    
    void value(){
        super.value();
        name = super.name;
        age = super.age;
        
        System.out.println(name);
        System.out.println(age);
    }
    
}

运行结果:

张三
20

    
    String name;
    int age;
    
    void value(){
        name = "张三";
        age = 20;
    }
}

class UserAction extends BaseAction{
    String name;
    int age;
    
    void value(){
        name = "李四";
        age = 21;
    }
}

class Main extends UserAction{
    
    String name;
    int age;
    
    public static void main(String[] args){
        Main m = new Main();
        m.value();
    }
    
    void value(){
        super.value();
        name = super.name;
        age = super.age;
        
        System.out.println(name);
        System.out.println(age);
    }
    
}

运行结果:

李四
21

    
    String name;
    int age;
    
    void value(){
        name = "张三";
        age = 20;
    }
}

class UserAction extends BaseAction{
    String name;
    
    void value(){
        name = "李四";
    }
}

class Main extends UserAction{
    
    String name;
    int age;
    
    public static void main(String[] args){
        Main m = new Main();
        m.value();
    }
    
    void value(){
        super.value();
        name = super.name;
        age = super.age;
        
        System.out.println(name);
        System.out.println(age);
    }
    
}

运行结果:

李四
0

总结:super.value()指向的是父类,但是父类中并不存在age,所以这时候age的值是默认值0。

    
    String name;
    int age;
    
    void value(){
        name = "张三";
        age = 20;
    }
}

class UserAction extends BaseAction{
    String name;
    
    void value(){
        super.value();
        name = "李四";
    }
}

class Main extends UserAction{
    
    String name;
    int age;
    
    public static void main(String[] args){
        Main m = new Main();
        m.value();
    }
    
    void value(){
        super.value();
        name = super.name;
        age = super.age;
        
        System.out.println(name);
        System.out.println(age);
    }
    
}

运行结果:

李四
20

总结:super.value()指向的是父类,但是父类中并不存在age,所以在父类中执行super.value(),让父类去调用自身父类的方法,这时候age才被赋值。因为在Main类中的value()方法中执行的super指向的是UserAction。

    
    String name;
    int age;
    
    void value(){
        name = "张三";
        age = 20;
    }
}

class UserAction extends BaseAction{
    String name;
    int age;
    
    void value(){
        name = "李四";
        age = 21;
    }
}

class Main extends UserAction{
    
    String name;
    int age;
    
    public static void main(String[] args){
        Main m = new Main();
        m.value();
    }
    
    void value(){
        name = super.name;
        age = super.age;
        
        System.out.println(name);
        System.out.println(age);
    }
    
}

运行结果:

null
0

总结:既调用父类的value()方法又调用父类的变量。如果只调用类型的变量,不调用父类的value()方法,name的值就是默认值null,age的值就是默认值0。

原文地址:https://www.cnblogs.com/guochang/p/9554202.html