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

看来只要对象是子类,那它所调用(以及间接调用)的方法都会优先选择属于它的同名子类方法,无视类型转换。

posted @   shanxin1954  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示