有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重载一个被重写的、继承的方法

假设我的类A和类B继承自A。我想重写方法public void print(),它应该可以正常工作

但是有没有可能在B中重载public void print(),但是这次使用参数,而不在类a中声明方法

abstract class A {
    String name;
    public void print();
}

class B extends A {
    @Override
    public void print() {
        System.out.println("Hello"); // Works just fine
    }

    public void print(String s) {
        System.out.println("Hello" + s); // Doesn't work when calling it, as it must be declared in A
    }
}

共 (1) 个答案

  1. # 1 楼答案

    是的,可以使用参数重载B中的public void print(),而无需在类a中声明方法。但必须将抽象类定义为:

    abstract class A
    {
    String name;
    public abstract void print();
    }
    

    抽象类可以有抽象方法,也可以有普通方法。当您声明普通方法时,您还必须给出该方法的实现。否则,您必须用抽象关键字声明该方法(否则您将得到编译错误),即不需要给出实现。在您的例子中,必须用上面提到的抽象关键字声明printf()方法。当扩展类A时,在类B中必须提供printf()方法的实现,该方法在类A中是抽象的,称为方法重写。除此之外,您还可以使用任何参数定义printf()方法,这被称为方法重载。但是您必须使用类B对象访问这两个方法,因为抽象类不能实例化,只能继承。请参考以下代码:

    abstract class A
    {
    String name;
    public abstract void print();
    }
    class B extends A
    {
    @Override
    public void print(){
    System.out.println("Hello");
    }
    //Overloaded method with String parameter
    public void print(String s){
    System.out.println("Hello" + s);
    }
    public static void main(String[] args){
    new B().print();//calling inherited method with class B object
    new B().print("Bishal");//calling overloaded method with class B object
    }
    }