2015-03-12 6 views
0

Я хочу, чтобы каждый метод класса A и класса B. эти два класса отношения определяются как «HAS-A» Отношения ....Как динамическое преобразование применяется в отношениях HAS-A

class A{ 
    public void getData(){ 
     System.out.println("Class A"); 
    } 
} 

class B{ 
    public void getData(){ 
     System.out.println("class B"); 
    } 
} 

public class Main { 
public static void main(String[] args) { 
     A a=new A(); 
     B b=new B(); 
     new Main().call(a); //call A Class Method 
     new Main().call(b); //call B class Method 
    } 
    public void call((Class Name??) a){ 
     a.getData(); 
    } 
} 
+1

Это походит на обоих классов должны реализовать один и тот же интерфейс, в основном ... А что 'Two'? Вы имели в виду 'Main'? И в чем заключаются отношения «есть-а»? Ни A, ни B «не имеют» ничего другого в обычном способе композиции. –

+0

ya его моя ошибка его не «два», а ее «основной» класс –

+1

Так что, пожалуйста, отредактируйте вопрос, а затем обратитесь к другим вопросам, о которых я просил. –

ответ

0

Вы можете сделать и B простираться Верхний, с верхними либо будучи высшего класса или интерфейса. В обоих случаях он должен иметь метод getData(), поэтому ваш метод вызова() может получить к нему доступ.

+0

ya его правда, даже я тоже получил эту идею, но я не хочу добавлять «расширить» или «реализовать» ключевое слово. Мне нужно знать, какое имя класса я должен писать в параметре «метод вызова»? так что я могу получить доступ к n числу классов –

+0

Пока они не разделяют какую-то общую базу, нет способа (кроме использования отражений или подобных). Я не понимаю, почему расширение или внедрение следует избегать, хотя ... – LastFreeNickname

+0

это был просто прототип ... почему я избегал из-за того, что я хотел вызвать только метод, который мог бы использовать мой реальный проект (J2ee с использованием базы MVC) let вы знаете, что в моем проекте все переменные экземпляра являются частными, и каждый класс имеет независимый –

0

Я получил Solution Спасибо за помощь мне .....

class A{ 
    public void getData(){ 
     System.out.println("class A"); 
    } 

} 
class B { 
    public void getData(){ 
     System.out.println("class B"); 
    } 
} 
public class Main{ 

    public static void main(String[] args) { 

     A a=new A(); 
     B b=new B(); 


     new Main().call(a); 
     new Main().call(b); 
    } 

    public void call(Object obj) 
    { 
     if(obj instanceof A) 
      ((A) obj).getData(); 

     if(obj instanceof B) 
      ((B) obj).getData(); 

    } 

} 
+0

. Хотя это работает, это несколько уродливое решение. Использование instanceof приведет вас к другим проблемам, например. минимизирует проблемы с расширением или наследованием. Подумайте об использовании расширений/инструментов, как это было предложено в моем сообщении. – LastFreeNickname

 Смежные вопросы

  • Нет связанных вопросов^_^