父类的属性或者方法被private修饰过以后,子类是否能继承的问题,以及this和super的区别

首先,继承的定义:继承是指一个对象直接使用另外一对象的属性和方法测试

很明显,父对象被private修饰过的属性和方法,子对象没法直接使用(能够经过父类的get 、set方法间接使用this

那么根据继承的定义来判断:private修饰过的都没法被继承spa

得出结论以后,我本身写了一些代码进行测试。code

  1.  使用继承后,父对象会随着子对象的建立而建立,根据内存加载的顺序也能够看出来。对象

  2.  父对象会比子对象早一步先建立:缘由blog

      2.1  子类的构造方法第一句老是要写上父类的构造方法,用来建立父对象,由于继承是发生在对象与对象之间的,因此必须先有一个父对象,子对象再去继承父对象继承

  3.  随着子对象的建立完毕,内存也同时存在父对象,这个父对象只能被子对象使用,子对象经过 super 关键字调用父对象的属性和方法内存

  4.  若是没有重写属性和方法,那么子对象里面实际上并无一个真正属于 "本身" 的属性和方法,因此此时咱们不管用 this 或者 super ,调用的都是父对象的东西,也就是说关键词写不写都无所谓,反正引用的都是同一个内存地址get

  5.  发生重写后,子对象从实际上拥有了属于 "本身" 的属性和方法,因此这时候咱们必须使用 thissuper 关键字来区分到底使用谁的数据io

 

public class Test01 {
    public static void main(String[] args) throws CloneNotSupportedException {
        //建立子对象
        B b = new B();    
        
        //调用子对象的t1方法
        b.t1();

    }
}

//父类
class A {
    private int test = 7;
    
    String name;
    int age;

    A(String name) {
        this.name = name;
    }
}

//子类
class B extends A {
    int test = 8;
    
    //重写age后,子对象拥有属于本身的age
    int age;

    B() {
        
        // 建立父类对象,父对象初始化 name = "小明"
        super("小明"); 
    }

    void t1() {
        
        // 小明
        System.out.println(super.name); 
        
        // 小明   从这里能够看出继承是先有父对象,子对象使用或继承(复制)父对象的name,
        //      可是咱们还不能判断子对象是复制仍是直接调用父对象的name。
        System.out.println(this.name);     
                                        
        this.name = "小红";
        
         // 小红 这里表示,this.name和super.name是同一个变量,也就是说继承以后,父对象的属性和对象能够被子对象调用
        System.out.println(super.name);
        
        super.age = 1;
        this.age = 2;
        
        //    1    父对象age并无被修改
        System.out.println(super.age);
        
        //    2    这里显示的是子对象本身的age
        System.out.println(this.age);
        
        //super.test报错(被private保护了)
        //System.out.println(super.test);
        
        //this.test可用
        System.out.println(this.test);
    }

}
相关文章
相关标签/搜索