2012-03-09 213 views
3
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的超類和稱爲worker的子類,所以如果有一個測試類需要在工人類中使用一個方法。在這種情況下,對象duck是類型轉換成Boss /的,但在代碼中,類型方法只能在worker類中使用,而不能在boss類中使用。然而java要求Boss類包含類型方法,即使它沒有被使用。如何讓方法只在工人類中聲明或者老闆類是否需要填充方法本質上什麼都不做?Java中的繼承和方法

回答

1

使用接口。使Worker實現該接口,但不是Boss

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

interface YourInterface 
{ 
     public void type(); 
} 
4

如果只有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(); 
} 
+0

你能解釋一下什麼呢'老闆的老闆=(老闆)工;'這裏的意思?如果不創建一個'工作者'實例,你可以投它嗎?請說明。 – noMAD 2012-03-09 06:53:32

+0

對不起,這應該是老闆老闆=(老闆)的鴨子; – 2012-03-09 06:58:33

+0

@noMAD:修正了錯字。 – ChrisWue 2012-03-09 07:00:59

0

試試這個....

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 
      } 
    } 
+1

我承認我不經常使用Java,而且我有點生疏,但我很確定你的代碼不會編譯。 – ChrisWue 2012-03-09 07:07:11

+0

Plz告訴我如何調用一個方法父母參考,如果它不在父... Plz一次嘗試檢查您的代碼.... – 2012-03-09 07:18:02

+1

@ Sumit..Now檢查出來... – 2012-03-09 07:22:09

1

這是OOP基本原理.. 可以調用只有那些法家長參考,這是家長存在..

Boss boss=new Worker(); 

使用boss我只調用Boss中存在的方法在完成時存在方法存在於父類中的存在波夫情況..

所以你只有2個方法來調用子類的個人方法..
1: -創建你的父母同樣的方法。父母可能interface or class驅逐出境人員說。
第二: -或者downcast到你的子類..

(Worker)boss.type();