首先,继承的定义:继承是指一个对象直接使用另外一对象的属性和方法测试
很明显,父对象被private修饰过的属性和方法,子对象没法直接使用(能够经过父类的get 、set方法间接使用)this
那么根据继承的定义来判断:private修饰过的都没法被继承spa
得出结论以后,我本身写了一些代码进行测试。code
1. 使用继承后,父对象会随着子对象的建立而建立,根据内存加载的顺序也能够看出来。对象
2. 父对象会比子对象早一步先建立:缘由blog
2.1 子类的构造方法第一句老是要写上父类的构造方法,用来建立父对象,由于继承是发生在对象与对象之间的,因此必须先有一个父对象,子对象再去继承父对象继承
3. 随着子对象的建立完毕,内存也同时存在父对象,这个父对象只能被子对象使用,子对象经过 super 关键字调用父对象的属性和方法内存
4. 若是没有重写属性和方法,那么子对象里面实际上并无一个真正属于 "本身" 的属性和方法,因此此时咱们不管用 this 或者 super ,调用的都是父对象的东西,也就是说关键词写不写都无所谓,反正引用的都是同一个内存地址get
5. 发生重写后,子对象从实际上拥有了属于 "本身" 的属性和方法,因此这时候咱们必须使用 this 和 super 关键字来区分到底使用谁的数据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); } }