Наследование и методы в Java - PullRequest
3 голосов
/ 09 марта 2012
  public class TestBoss {

      public static void main(String[] args) {
                  Worker duck = new Worker();

                  (Boss) duck.type();
       }

 public class Boss{
       //stuff
 }

 public class Worker extends Boss{
       public void type(){
        //stuff
       }
 }

Если был суперкласс, называемый боссом, и подкласс, называемый работником.Так что если есть тестовый класс, который должен использовать метод в рабочем классе.В этом случае объектная утка приведена к типу, приведенному к Boss / In, хотя метод type используется только в рабочем классе, а не в классе босса.однако java требует, чтобы класс Boss содержал метод type, даже если он не используется.Как сделать метод, объявленный только в рабочем классе, или класс босса должен иметь метод-заполнитель, который по сути ничего не делает?

Ответы [ 4 ]

4 голосов
/ 09 марта 2012

Если только Worker предоставляет метод type(), вам необходимо привести ваш объект обратно к Worker, прежде чем вы сможете его использовать.Например,

Worker duck = new Worker();
...
Boss boss = (Boss)duck;
...
if (boss instanceof Worker) // check in case you don't know 100% if boss is actually a worker
{
    (Worker)boss.type();
}
1 голос
/ 09 марта 2012

Это основной принцип OOP .. . Вы можете вызывать только те методы со ссылкой на родителей, которые существуют в Parent ..

Boss boss=new Worker();

используя boss u вызывать только метод, который существует в Boss coz во время проверки существования метода в родительском классе в вышеприведенном случае.

Итак, у вас есть только 2 способа вызвать персональный метод дочернего класса.
1st: - создать такой же метод в вашем родителе. Родитель может быть interface or class как deporter сказал.
2-й: - Или downcast в ваш детский класс ..

(Worker)boss.type();
1 голос
/ 09 марта 2012

Используйте интерфейс.Сделайте Worker реализующим этот интерфейс, но не Boss.

 public class Worker extends Boss implements YourInterface
 {
  ...
 }

 interface YourInterface
 {
       public void type();
 }
0 голосов
/ 09 марта 2012

Попробуйте это ....

 public class TestBoss {

          public static void main(String[] args) {
Boss duck = new Worker();
                      ((Worker) duck).type();
           }

     public class Boss{
           //stuff
     }

     public class Worker extends Boss{
           public void type(){
            //stuff
           }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...