Перегрузить переопределенный, унаследованный метод - PullRequest
0 голосов
/ 28 января 2019

Скажем, мой класс A и класс B наследуются от A. Я хочу переопределить метод public void print(), который должен работать просто отлично.

Но возможно ли перегрузить public void print() в B, нос параметром на этот раз без объявления метода в классе 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 голосов
/ 28 января 2019

Да, возможно перегрузить public void print () в B параметром, не объявляя метод в классе 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
}
}
0 голосов
/ 28 января 2019

Это прекрасно.Считается, что метод перегружен, что является обычной практикой в ​​Java.Вам нужно только объявить метод print() в абстрактном классе A, например:

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