说我有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
}
}
答案 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();
}