首先看一下下面的程序,猜猜会输出什么:
class Point{ Point(){ show(); } void show(){ System.out.println("Father."); } } class ColorPoint extends Point{ void show(){ System.out.println("Son."); } public static void main(String args[]){ ColorPoint point=new ColorPoint(); } }
由于,在子类的构造函数中会默认的调用父类的构造函数,但是父类的构造函数调用了被子类重载过得方法。这会导致直接调用子类覆盖后的方法。
所以输出结果:
Son.
看懂了上面的代码,再分析分析下面的代码:
class Point{ protected final int x,y; private final String name; Point(int x,int y){ this.x=x; this.y=y; name=makeName(); } protected String makeName(){ return "["+x+","+y+"]"; } public final String toString(){ return name; } } public class ColorPoint extends Point{ private final String color; public ColorPoint(int x,int y,String color) { // TODO Auto-generated constructor stub super(x, y); this.color=color; } protected String makeName(){ return super.makeName()+":"+color; } public static void main(String args[]){ System.out.println(new ColorPoint(4, 2, "purple")); } }
当在父类中调用makeName()方法时,由于该方法已经被子类重写过了。所以直接调用的是子类的makeName()方法。由于此时导致color域还没有被赋值还是null,导致name已将变成了[4,2]:null。执行到
this.color=color;时虽然color域被赋值但是已经无法改变name域的值。所以输出了:
[4,2]:null
相关推荐
在子类中定义构造方法时,需要传递参数给父类的构造方法,否则我们得到的可能是一个构造不完整的对象。 要调用父类的方法,首先要找到一个引用类本身的途径:句柄(handle),PHP为此提供了parent关键字。 parent...
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。 但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。 方法重写又称方法覆盖。 (2)若子类中...
行业分类-设备装置-一种数据覆写方法
主要介绍了解决Kotlin 类在实现多个接口,覆写多个接口中相同方法冲突的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
以下页面在运行中,调试输出的永远是alter('1'),原因是按照页面加载从上至下的顺序,同名的方法以最后一个为准.
主要介绍了Java的覆写操作,结合实例形式分析了java属性覆写及super调用父类方法覆写相关操作技巧,需要的朋友可以参考下
覆写
移动互联网应用
Spring Cloud 覆写远端的配置属性
Android 自定义view,覆写onMeasure例子
initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...
initializer10-5初始化只读数据10-6在构造器中使用out与ref10-7struct构造器10-7-1struct构造器的限制10-8static构造器10-8-1使用static构造器初始化静态成员10-8-2static构造器的限制10-9对象与内存10-9-l对象的...
1:用sealed修饰的类有什么特点?...答:只含有共有抽象方法的类,方法必须在子类中实现;接口中的方法是用来定义对象之间通信的契约,指定方法的修饰没有意义,所以方法不可被修饰,一个类可以继承多个接口。
覆写Feign的默认配置-代码部分-代码部分.zip 覆写Feign的默认配置-代码部分博文中,优化后的服务消费者和服务提供者,以及Eureka Server、父级工程的源代码
硬盘客体重用的安全等级保护覆写机制研究,清除
基于覆写验证的云数据确定性删除方案
如果在抽象类中存在有参构造方法,则必须在子类中明确的使用super([参数列表])指明要调用父类中的哪个构造方法. 这里举例如下: view plaincopy to clipboardprint? abstract class Person { // 应该有姓名和...