2016-05-14 1 views
0

У меня есть запрос: мы можем получить доступ ко всем методам из класса ребенка с помощью вниз литья рассмотреть следующий код Базовый класс:Как получить доступ ко всем дочерним методам с использованием одного объекта?

public class BaseClass { 

    public void method() { 
     System.out.println("Base class"); 
    } 
} 

ChildOne:

public class ChildOne extends BaseClass { 
    @Override 
    public void method() { 
     System.out.println("inside ChildOne"); 
    } 
} 

ChildTwo:

public class ChildTwo extends BaseClass { 

    @Override 
    public void method() { 
     System.out.println("inside ChildTwo"); 
    } 
} 

И класс клиента

try { 
    List l = new ArrayList(); 
    l.add(new BaseClass()); 
    l.add(new ChildOne()); 
    l.add(new ChildTwo()); 

    for (Object o : l) { 
     BaseClass bc = (BaseClass) Class.forName(o.getClass().getName().toString()).newInstance(); 
     bc.method(); 
    } 
} catch (Exception e) { 

} 

outPut : 

Base class 
inside ChildOne 
inside ChildTwo 

теперь вопрос, что если

public abstract class BaseClass { 

     public abstract void method(); 
    } 

как мы не можем создать объект либо интерфейс или абстрактного класса. В приведенном выше коде я могу получить доступ ко всем методам из всех классов. Считаем, что у нас есть интерфейс с именем BaseClass с определением метода, поскольку я реализую этот интерфейс во многих классах. Вопрос заключается в том, как я могу получить доступ ко всем методам без создания конкретного экземпляра каждого класса. Я хочу сделать это в одном цикле, но наследование не позволит нам Как это сделать?

ответ

2

Вы должны использовать список с родовым типом (BaseClass): List<BaseClass> l = new ArrayList<>();

Полиморфизм в действии, то цикл будет выглядеть следующим образом:

for (BaseClass o : l) o.method(); 
+1

здесь BaseClass является ** ** абстрактного класса и Метод ** abstract ** тоже – emotionlessbananas

+0

@holidayCoder, да, но список будет содержать завершенные реализации 'BaseClass', которые реализуют все абстрактные методы от родителя. – Andrew

+1

получил его, спасибо за помощь – emotionlessbananas

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