繁体   English   中英

重载一个被覆盖的继承方法

[英]Overload an overridden, inherited method

假设我有我的 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
    }
}

是的,可以使用参数重载 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
}
}

这完全没问题。 它被认为是重载一个方法,这是java中的一种常见做法。 您只需要在类 A 抽象中声明print()方法,例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM