[英]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.