下面例子摘自《深入JAVA虚拟机第二版》第19章,P354
PS:本文不做结果解释,原因请参考作者的解释。只描述结果
package com.shuidexiongdi.thread;
public class SuperTest {
public static void main(String[] args) {
new Sub().exampleMethod();
}
}
class Super {
private void interestingMethod() {
System.out.println("Super's interestingMethod");
}
void exampleMethod() {
interestingMethod();
}
}
class Sub extends Super {
void interestingMethod() {
System.out.println("Sub's interestingMethod");
}
}
上面代码运行结果是?你的认为是?好吧,自己动手验证一下。
结果如下:
Super's interestingMethod
如果验证和自己想法一致的,恭喜你,你的基础还不错。我们接着对例子进行修改。
我们对上面例子中的Sub类进行修改
class Sub extends Super {
void interestingMethod() {
System.out.println("Sub's interestingMethod");
}
void exampleMethod() {
interestingMethod();
}
}
好了,上面的运行结果呢?和没修改前一致?还是动手试试吧。
运行结果如下:
Sub's interestingMethod
原因请参考作者原著的解释了,这里只是想提醒一下,继承在没有覆盖父类方法的情况下,定义一个与父类方法相同签名的私有方法(而这种情况我们会有意无意的发生着),请校验和期望的一不一致。不要简单的认为父类的方法纯碎就是拷贝到子类类体下。
分享到:
相关推荐
pta题目java的继承覆盖综合题源码,全部内容为自己原创,能够运行但是有些代码可能写的不是很精简,这个摘要也太长了吧,凑不够字数啊
Java方法继承、方法重载、方法覆盖总结。比较具体细致地描述他们之间的连系与区别,需要的同学可以看看。
变量和方法覆盖和隐藏的不同:一个类的实例无法通过使用全局名或者强制自己转换为父类型,以访问父类中被隐藏的方法,然而强制转换子类为父类型之后,可以访问父类中被隐藏的变量。另外静态方法不能覆盖父类的实例...
Delphi--抽象方法、重载、覆盖。继承实例Delphi--抽象方法、重载、覆盖。继承实例
本文实例讲述了Python实现通过继承覆盖方法。分享给大家供大家参考,具体如下: Python真是太动态了,所有的方法默认都是虚的。子类定义父类同名函数之后,父类函数被覆盖。 class P(object): def foo(self): ...
java中方法的继承,覆盖
实例:使用类的继承性编写程序,并输出结果。 class A: #父类 def init(self): self.str=[] def ft(self,buf): return [n for n in buf if n not in self.str] class B(A): #子类 def init(self):#重写覆盖...
一个student类,lectureTeatre类,继承抽象module类,通过继承来实现接口
NULL 博文链接:https://1819027025.iteye.com/blog/2256350
ASP继承环境ASP继承环境ASP继承环境
java相关知识的学习笔记,个人整理,里面涵盖:继承,接口,重载,覆盖,final等等的知识点
继承、super、接口、函数覆盖
C#继承测试C#继承测试C#继承测试C#继承测试
JS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txtJS继承.txt
继承映射
在JavaScript中继承是一个非常...得益于这种语言的灵活性,你既可使用标准的基于类的继承,也可使用更微妙一些(但也可能更有效一些)的原型式继承。 本章将讨论在JavaScript中创建子类的各种技术以及它们的适用场合。
最近有个同学问了我一个小问题,觉得很有意思,之前一直没有想到过。他说“java中存在方法覆盖,是否存在变量的覆盖呢?”。
OC-category的方法能被子类继承吗?2.它覆盖原有类的方法后,原有类的方法还能调用吗?如果能,你说明理由。
设计程序 验证单继承 多继承 重复继承以及有虚基类时 构造函数与析构函数的调用顺序