难度
初级
学习时间
10分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.内部类
前面我们学习过内部类,这里我们再来温故一下。
演示:
请定义一个内部类。
代码:
没有学习过的同学或者是不太清楚内部类的同学也别急,可以点击下面内部类学习资料来进行学习。
附:内部类学习资料
2.当发生继承关系时,内部类是否会被覆盖?
说到继承,前面我们也学习过,如果还有不太清楚的同学,可以在本章结尾处点击相关学习资料来进行学习。
好,接下来,我们就正式地开始本章内容,当发生继承关系时,内部类是否会被覆盖呢?大家在面对这个问题的时候,可以先给出自己的答案,然后再来跟随着本章内容进行学习。
对于这个问题的答案,我们来一起探究。
演示:
请定义一个父类Animal,再定义一个子类Dog,子类Dog继承父类Animal。
请观察程序代码。
代码:
Animal类:
Dog类:
从程序代码来看,我们已经完成了继承关系,并且在继承关系中完成了在父类中定义了内部类。
我们先来看看子类里面可不可以创建Inner对象,在看之前呢,把内部类Inner 构造方法 添加上,并且在里面写一些标记性语句,用于表示这个内部类来自于父类。
接着,我们在子类Dog里面写上构造方法,并在构造方法里面创建内部类Inner对象:
好啦,接下来我们就去写Main类吧:
很简单,就是一句代码,创建Dog对象。
运行程序,执行结果:
从运行结果来看,结果并不意外,而且程序也没有问题。
回过头来,我们再来看看这个程序,首先是父类Animal:
大家注意看,这个内部类的访问修饰符是public,也就是说子类可以访问,为什么要说明这个?
因为马上我们要探究的就是子类里面定义一个和父类一摸一样的内部类,看能否覆盖调父类中相同的内部类。 只有非私有成员才谈得上覆盖的可能性 ,所以这里内部类的修饰符大家要注意一下。
继续往下看:
写上父类中内部类Inner的构造方法,目的就是用以说明这个内部类就是来自于父类中的内部类。其执行结果也说明了这一点:
好了,接下来就该给子类写上一个和父类一摸一样的内部类,然后其余代码不变:
运行程序,执行结果:
从运行结果来看,结果和之前的不一样了,之前显示的是“Animal 内部类Inner”,此次结果显示的是“Dog 内部类Inner”,由此可见, 当发生继承关系,父子类都有相同的内部类时,父类中的内部类可以被子类中的内部类覆盖。
好了,答案很明确了,我们也体会到其中的原因是什么,希望大家可以记住这一知识点,同时也希望该知识点能给予大家帮助。
总结
- 当发生继承关系,父子类都有相同的内部类时,父类中的内部类可以被子类中的内部类覆盖。
至此,Java中内部类是否能被覆盖相关内容讲解先告一段落,更多内容请持续关注。
附:类学习资料
附: 抽象类 学习资料
附:接口学习资料
附:匿名内部类学习资料
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
下一章
“全栈2019”Java第一百一十二章:什么是闭包?
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!