Java多态继承

vbopmzt1  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(100)
class B{
  void print(String s){
            System.out.println('B');
     }
}

class D extends B{
  public void print(Object o){
           System.out.println('D');
     }
}

public class TestB {
    public static void main(String[] args) {
        D d = new D();
        d.print("Test");

    }

}

大家好,我可以知道如何确定这种打印方法使用的是哪种打印方法,以及使用它的原因吗?我知道这里没有向上转换或方法重写。既然Object是String的超类,那么print方法会在类D中使用吗?

sh7euo9m

sh7euo9m1#

您提供的代码称为Method Overloading
main方法中的代码告诉程序创建类D的示例,并使用String参数调用方法print
因为这是Method Overloading而不是Method Overriding,所以Java运行时选择运行原始方法。
要使这段代码方法覆盖两个类中的两个方法,需要有相同类型的参数,如下所示:

class B{
  public void print(String s){
            System.out.println('B');
     }
}

class D extends B{
  public void print(String o){
           System.out.println('D');
     }
}

public class TestB {
    public static void main(String[] args) {
        D d = new D();
        d.print("Test");

    }

}

输出量:

D

或者,如果你想让程序重载方法,但仍然显示输出D,你需要将**“Test”**声明为Object变量,或者将其强制转换为Object:

class B{
  public void print(String s){
            System.out.println('B');
     }
}

class D extends B{
  public void print(Object o){
           System.out.println('D');
     }
}

public class TestB {
    public static void main(String[] args) {
        D d = new D();
        // casting
        d.print((Object)"Test");
        
        // variable
        Object t = "Test";
        
        d.print(t);

    }

}

相关问题