Java学习之继承的本质(重要)
创始人
2024-02-18 17:46:27
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,输出"旅游"

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...