Java学习之继承的本质(重要)
创始人
2024-02-18 20:59:28
0

目录

目录

一、一个继承的代码案例

二、子类创建的内存布局

三、查找顺序

一、son.name的输出结果

二、son.age的输出结果

 三、son.hobby的输出结果


一、一个继承的代码案例

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();//内存的布局      }
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";int age = 63;
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";int age = 39;}class Son extends Father {//子类String name = "大头儿子";}

二、子类创建的内存布局

上述代码的内存图 

访问顺序:Son---->Father---->GrandPa---->Object

一个对象中可以有同名的属性,不会冲突

三、查找顺序

一、son.name的输出结果

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();//内存的布局System.out.println(son.name);//访问同包不同类的默认修饰符修饰的方法:√}
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";int age = 39;}class Son extends Father {//子类String name = "大头儿子";}

查找规则:

按照查找关系来返回信息

(1)首先看子类是否有该属性

(2)如果子类有这个属性,并且可以访问,则返回信息

(3)如果子类没有这个属性,就看父类有没有这个属性(如果父类有该属性,并且可以访问,就返回信息...,如果不能访问,就在父类里创建public方法,返回属性信息,然后调用该方法)

(4)如果父类没有就按照(3)的规则,继续找上级父类,知道Objcet

按照以上规则:输出“大头儿子”

二、son.age的输出结果

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();//内存的布局System.out.println(son.name);//访问同包不同类的默认修饰符修饰的方法:√System.out.println(son.age);//Son类没有age,向上查找,输出39}
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";int age = 39;}class Son extends Father {//子类String name = "大头儿子";}

分析:由于子类Son没有age这个属性,所以向上查找,在父类Father里面找到并输出“39”

假设:int age = 39;的属性改成private,就无法直接访问,

'age' has private access in 'com.hspedu.entends_.Father' 

解决方法: 结合继承细节的第一条知识,在Father创建public方法,然后在main方法中调用该方法

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();System.out.println(son.name);System.out.println(son.getAge());}
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";int age = 63;
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";private int age = 39;public int getAge() {return age;}
}class Son extends Father {//子类String name = "大头儿子";}

运行结果

 tips:如果GrandPa类Father类中都有age这个属性,但是Father类中的属性是private, GrandPa类中的属性是默认,系统还是会报错,不会跳过Father去查找GrandPa

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();//内存的布局System.out.println(son.name);//访问同包不同类的默认修饰符修饰的方法:√System.out.println(son.age);//Son类没有age,向上查找,输出39}
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";int age = 63;
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";private int age = 39;}class Son extends Father {//子类String name = "大头儿子";}

IDEA提示:

还是要创建public方法,然后在main方法中调用 

 三、son.hobby的输出结果

package com.hspedu.entends_;/*** 讲解继承的本质*/
public class ExtendsTheory {public static void main(String[] args) {Son son = new Son();//内存的布局System.out.println(son.name);//访问同包不同类的默认修饰符修饰的方法:√System.out.println(son.getAge());System.out.println(son.hobby);}
}class GrandPa {//爷爷类String name = "大头爷爷";String hobby = "旅游";int age = 63;
}class Father extends GrandPa {//父类//父类和子类的属性name名字相同String name = "大头爸爸";private int age = 39;public int getAge() {return age;}
}class Son extends Father {//子类String name = "大头儿子";}

Son类没有hobby,向上查找,Father类也没有,直到GrandPa,输出"旅游"

相关内容

热门资讯

“新18条”落地!支持前海深化... 2022年9月,海关总署出台《海关总署支持前海深港现代服务业合作区全面深化改革开放若干措施》(俗称“...
原创 比... 最近金融圈炸了个大新闻:俄罗斯央行把欧洲清算银行告上法庭,一开口就要18.2万亿卢布赔偿,折合美元差...
爱奇艺少儿将推出AI内容专项扶... IT之家 12 月 19 日消息,爱奇艺少儿于 12 月 18 日在北京举办 2025 年内容伙伴私...
金融调解进县域 一站式解纷护民... “不用跑法院、不用耗时长,3天就敲定了还款方案,还拿到了司法确认文书,这下我们银行和客户都踏实了!”...
深桑达A(000032)披露累... 截至2025年12月19日收盘,深桑达A(000032)报收于18.52元,较前一交易日上涨0.27...
点赞!莞城法援这样为“夕阳红”... 尊老敬老是中华民族的传统美德 如何切实保障老年人的合法权益? 从专业化法律援助,到常态化的为老法律服...
原创 鞠... 一觉醒来,鞠婧祎可能会成为法制咖,被指控严重经济犯罪? 去年六月,鞠婧祎宣布和丝芭解约,但丝芭不仅...
五台山景区组织开展宗教教职人员... 马晓琴 王政钦 五台山管委会 12月18日至19日,五台山景区组织开展宗教教职人员“学法规、守戒律...
海正生材(688203)披露诉... 截至2025年12月19日收盘,海正生材(688203)报收于12.45元,较前一交易日上涨0.89...
陕国投A:增发价格将按法规要求... 有投资者在互动平台向陕国投A提问:“请问贵公司2024年经审计的归属于母公司普通股股东的每股净资产(...