转载

Java|类的继承中两种错误的解决方式 |案例介绍

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

欢迎加入团队圈子!与作者面对面!直接点击!

|案例介绍

在日常用Java写代码的过程中,往往在子类继承父类时,会出现一些问题。今天我来讲解两个常见问题的解决方式。

|问题分析1

重写父类方法时修改权限导致继承失败。

源码如下:

class Test{

public Test(){

protected void doAe(){

protected Test doIt(){

return new Test();

}

}

}

}

class Test2 extends Test{

public Test2(){

super();

super.doAe();

}

public void doAenew(){

}

public void doAe(){

}

private Test2 doIT(){

return new Test2();

}

}

|解决方案

当重写父类方法时,修改的方法权限只能从小的范围到大的范围改变,如上面的程序,父类中的 doAe() 方法的权限为 protected ,继承后子类中的方法 doAe() 的修饰权限只能修改为 public,或者不变。

修改后的代码如下:

class Test{

public Test(){

protected void doAe(){

protected Test doIt(){

return new Test();

}

}

}

}

class Test2 extends Test{

public Test2(){

super();

super.doAe();

}

public void doAenew(){

}

public void doAe(){

}

public Test2 doIT(){

return new Test2();

}

}

|问题分析2

实例化子类对象前,无参数的父类构造函数执行,但有参数的却未执行。

源码如下:

class Pa{

public Pa(){

System.out.println("调试父类的构造方法。");

}

public Pa(String[] args){

System.out.println("调用父类带参数的构造方法。");

}

}

class AaPa extends Pa{

public AaPa(){

System.out.println("调用子类的AaPa()构造方法。");

}

}

public class AaCc extends AaPa{

AaCc(){

System.out.println("调用子类的AaCc()构造方法。");

}

public static void main(String[] args){

AaCc a = new AaCc();

}

}

|解决方案

在调用子类构造方法之前,会自动调用父类无参数的构造函数,若想要执行父类带参数的构造函数,只能使用 super 关键字显示调用父类的构造方法。

修改后的代码如下:

class Pa{

public Pa(){

System.out.println("调试父类的构造方法。");

}

public Pa(String[] args){

System.out.println("调用父类带参数的构造方法。");

}

}

class AaPa extends Pa{

public AaPa(){

super("args");

System.out.println("调用子类的AaPa()构造方法。");

}

}

public class AaCc extends AaPa{

AaCc(){

System.out.println("调用子类的AaCc()构造方法。");

}

public static void main(String[] args){

AaCc a = new AaCc();

}

}

END

主  编   |   王文星

责  编   |   李劲潮

where2go 团队

   

微信号:算法与编程之美          

Java|类的继承中两种错误的解决方式 |案例介绍

长按识别二维码关注我们!

温馨提示: 点击页面右下角 “写留言”发表评论,期待您的参与!期待您的转发!

原文  http://mp.weixin.qq.com/s?__biz=MzI5MTQ5NDY1MA==&mid=2247491071&idx=1&sn=f4b1000bb79f446e85dcbcd8d8876273
正文到此结束
Loading...