Как по-разному использовать метод в суперклассе для подклассов ((без перечисления или каких-либо атрибутов))? - PullRequest
0 голосов
/ 02 апреля 2019

Проблема в том, что я хочу суперкласс A и три подкласса, B, C, D. и есть метод, который есть только у суперкласса A, и ни у одного из подклассов нет этого метода, и у метода есть различные результаты в каждом подклассе. Я также не могу переопределить любые методы. как я могу написать это без использования enum или каких-либо атрибутов для какого-либо класса? например:

public class {
 public String method1(){
  //what each class type should do
 }
}
public class B extends{
}
public static void main(String[] args) {
   A[] elements = {new A(),new B()};
    for (int i = 0; i < elements.length; i++) {
        System.out.println(elements[i].method1());
 }
}

результаты, например: A1 B1

Ответы [ 3 ]

0 голосов
/ 02 апреля 2019

Вы можете использовать Generics, как это, но лучше использовать переопределение

 public class A {
        public <T extends A> String method1(T classInstance) {
            return method(classInstance);
       }

       private String method(A classInstance) {
            return classInstance.toString();
       }

       private String method(B classInstance) {
            return classInstance.toString();
       } 
}



 public class B extends A{
 }

 public class Application {
        public static void main(String[] args) {
            A[] elements = {new A (), new B ()};
            for (int i = 0; i < elements.length; i++)
            {
                System.out.println (elements[i].method1(elements[i]));
            }
        }
    }
0 голосов
/ 02 апреля 2019
class A {
  public String method1() {
        if(this instanceof B) {
          return "Class B";
          //do something for class B
        } else if (this instanceof C) {
          return "Class C";
          //do something for class C
        }
        return "";
    }
}
class B extends A { }
class C extends A { }
public class Main {
    public static void main(String[] args) {
        A[] elements = {new A(),new B()};
        for (int i = 0; i < elements.length; i++)
            System.out.println(elements[i].method1());
    }
}
0 голосов
/ 02 апреля 2019

Метод переопределения является лучшим решением, я думаю.

Но если вы хотите иметь одну функцию в классе A, вы можете использовать istanceof для проверки класса

if (экземпляр объекта A) doSomething ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...