java 继承的本质
继承的本质
ExtendsTheory.java
public class ExtendsTheory{
public static void main(String[] args){
Son son = new Son(); // 内存的布局
}
}
class GrandPa{ // 爷类
String name = "大头爷爷";
String hobby = "旅游";
}
class Father extends GrandPa{ // 父类
String name = "大头爸爸";
int age = 39;
}
class Son extends Father { // 子类
String name = "大头儿子";
}

创建子类先加载的是类,类看继承关系,先加载 Object 然后 GrandPa ...
随后在堆中分配空间,对象将地址返回给主方法的对象引用。
当子类的 son 去访问对象的属性的规则:
ExtendsTheory.java
public static void main(String[] args){
Son son = new Son(); // 内存的布局
System.out.println(son.name); // 返回大头儿子
System.out.println(son.age); // 返回继承的父类 age
System.out.println(son.hobby); // 返回继承的爷类 hobby
}
访问 son.name 按照查找关系来访问信息。
- 规则:
- 首先看子类中是否有该属性
- 如果子类有该属性并且可以访问则返回信息
- 如果子类没有这个属性就看父类有无这个属性,当父类有并且可以访问就访问该书属性
- 如果父类也没有就按照父类的规则继续往上查,直到 Object 没有的话会报错。
G:\java\继承>java ExtendsTheory
大头儿子
39
旅游
如果
class Father extends GrandPa{ // 父类
String name = "大头爸爸";
private int age = 39;
}
private 有在创建对象的时候,在内存中是有的,只是不能访问,需要设置一个公共的方法。
...
Son son = new Son();
System.out.println(son.getage());
...
... ...
class Father extends GrandPa{ // 父类
String name = "大头爸爸";
private int age = 39;
public int getage(){
return age;
}
}
... ...
发现调用的是私有的属性会报错,不会在向上找一个爷类的公有的age 。

浙公网安备 33010602011771号