Общие методы и наследование в Java - PullRequest
0 голосов
/ 20 апреля 2011

Допустим, класс C и D расширяют класс B, который расширяет класс A

У меня есть методы в классе E, в которых я хочу использовать объект C или объект D. Я знаю, что этот классА предоставляет все методы, которые мне нужны.Как я могу написать метод, который позволяет мне передавать объект C или объект D в качестве параметра?

Прав ли я, думая, что мне нужно создать универсальный класс?Если да, есть ли у кого-нибудь конкретные примеры, которые ближе к тому, что мне нужно, это это , которое, кажется, только говорит мне, как использовать существующий класс коллекции?

Ответы [ 4 ]

6 голосов
/ 20 апреля 2011
class A {
  public String hello(){return "hello";}
}
class B extends A{}
class C extends B{}
class D extends B{}

Метод hello доступен во всех подклассах B, C и D.

Итак, в E сделайте что-то вроде:

private void test() {
  System.out.println(hello(new A()));
  System.out.println(hello(new B()));
  System.out.println(hello(new C()));
  System.out.println(hello(new D()));
}

public String hello(A a) {
  return a.hello();
}

и вы можете передавать экземплярыA, B, C или D

Кстати - дженерики в этом сценарии не нужны (насколько я понял)

2 голосов
/ 20 апреля 2011

Если C и D имеют A в качестве общего предка и A предоставляет все необходимые методы, тогда ваш метод должен просто взять экземпляр A в качестве параметра.Вам не нужен общий метод, если я не понял вашего вопроса.

1 голос
/ 20 апреля 2011
public void doSomething(A input) {
  input.methodInA();
  input.secondMethodInA();
  ...
}

Полиморфизм запустит возможный переопределенный код, реализованный на C или D, вам не нужно ничего делать, кроме вызова метода.

0 голосов
/ 20 апреля 2011
class A { 

}

class B extends A { 


}

class C extends B { 


}

class D extends B { 

}

class E { 

    public void test ( A a ) { 
        // c or d will work fine here
    }

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