java子类转父类后调用谁的方法(同名时)
以前一直以为子类转父类后,就会调用父类的方法了。其实不是,依旧是子类的方法。
1 2 3 4 5 6 7 8 9 | class Child extends Parent{ public void show() { System.out.println( "I am child" ); } }<br><br> class Parent { public void show() { System.out.println( "I am parent" ); } }<br><br> |
public class HelloWorld {
public static void main(String[] args) {
Child c = new Child();
Parent p = c;
p.show();
}
}
上面这个程序,创建一个Child实例,然后转成父类型,调用show(),会发现调用的还是子类行的show()。
打印输出:
I am child
不仅如此,如果子类调用了继承的父类函数,而这个父类函数里又调用了一个同名函数,那么调用的仍旧是子类所重写的函数。
class Child extends Parent{ public void foo() { System.out.println("foo, I am child"); } } class Parent {
public void show() { System.out.println("I am child"); }
public void foo() { System.out.println("foo, I am Parent"); } } public class HelloWorld { public static void main(String[] args) { Child c = new Child(); Parent p = c; p.show(); } }
这个例子增加了一个foo方法被show()间接调用,同时删除了子类的show()来强制调用父类的show(),结果证明,父类show仍旧调用子类的foo().
I am parent
foo, I am child
看来只要对象是子类,那它所调用(以及间接调用)的方法都会优先选择属于它的同名子类方法,无视类型转换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步