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