重载重写的,继承的方法

时间:2019-01-28 16:47:52

标签: java class inheritance override

说我有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
  }
}

2 个答案:

答案 0 :(得分:1)

是的,可以在不声明类A中方法的情况下用参数重载B中的public void print()。但是您必须将抽象类定义为:

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

抽象类既可以具有抽象方法,也可以具有普通方法。当您声明普通方法时,您还必须为该方法提供实现。否则,您必须使用abstract关键字声明该方法(否则您将得到编译错误),即无需执行。在您的情况下,您必须如上所述声明带有抽象关键字的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
}
}

答案 1 :(得分:-1)

这很好。它被认为是重载方法,这是Java中的常见做法。您只需要在类A抽象中声明print()方法,例如:

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