2012-06-20 50 views
0

我不確定標題是否準確。我有幾個類像電視,我只想在一個類中使用它們。是否有可能在另一個課程中調用電視中的方法?如果是這樣,我是否需要修改Tv類中的構造函數? (TS是一個接口)。班級之間的互動

class Tv implements TS{ 

    private String v; 

    public Tv(String v){ 
      this.v = v; 
    } 

    public void open(){ 
      System.out.println("open"); 
    } 

     public void volume(String v){ 
     ... 
     } 

} 

public class TvSet{ 
    public static void main(String args[]){ 
     Tv t = new Tv("+"); 
    } 
} 

我已經嘗試了這一點: 「identifier expected after this token

public class RunTv { 
    Remote r = new Remote("+"); 
    Tv t = new Tv("+"); 
    t.open(); 
} 

的IDE讓我想起了我應該修改Tv還是RunTv

回答

1

第一個問題已經被冰凍豌豆的Owl和Roddy回答了,但是總結一下:是的,只要它們是公開的而且你有一個包含該方法的類的實例,你可以在另一個類中調用方法。

爲了您的「identifier expected...」錯誤等問題,你應該改變RunTv

您不能在方法塊外調用t.open()。如果你把它改成這樣的:

public class RunTv { 
    public void openNewTv() 
    { 
     Remote r = new Remote("+"); 
     Tv t = new Tv("+"); 
     t.open(); 
    } 
} 

然後當你調用openNewTv方法會造成的RemoteTv一個新實例,然後它會調用在Tv實例open方法。要調用openNewTv你可以在你的main方法創建的RunTv一個實例是這樣的:

public class TvSet{ 
    public static void main(String args[]){ 
     Tv t = new Tv("+"); 
     RunTv runTv = new RunTv(); 
     runTv.openNewTv(); 
    } 
} 

如果你不想每次都打開一個新的Tv你可以做的方法靜態時間創建一個新的實例,這意味着它不屬於任何實例,而是類本身(要了解這些事情變得更好,你應該閱讀this) 可以使靜態的方法是這樣的:

public class RunTv { 
    public static void openNewTv() 
    { 
     Remote r = new Remote("+"); 
     Tv t = new Tv("+"); 
     t.open(); 
    } 
} 

現在,您可以撥打openNewTv無線因此必須創建如下RunTv的實例:

public class TvSet{ 
    public static void main(String args[]){ 
     Tv t = new Tv("+"); 
     runTv.openNewTv(); 
    } 
} 

希望這會有所幫助。 :)

1

是的,如果方法定義中有public這意味着你可以在其他類中創建Tv對象後調用這些方法。

public是一個訪問修飾符,但公共方法只能在創建該特定類的對象後調用。這樣,

Tv tv = new Tv("A", "B"); 
tv.open(); 

這將是巨大的閱讀the documentation爲好,它會引導你如何編寫一步Java程序一步。

+0

我遇到了一些新的問題,我修改了這個問題。 – juju

0

如果您的方法被定義爲public - 如您的示例public void open(),您可以在另一個類的電視對象上調用這些方法。

因此,在你TvSet類,在你的主要方法:

public class TvSet { 
    public static void main(String[] args) { 
     Tv t = new Tv("+", "+"); 
     t.open(); // this is valid 
    } 
} 

另外,如果兩個TvSetTv是在同一個包,你可以在你的方法,而不是public使用默認的訪問修飾符 - 例如: 。 void open()而不是public void open()

如果Tv有這樣的方法:

private void close() { 
    System.out.println("CLOSED"); 
} 

然後,你可以做到這一點:

public class TvSet { 
    public static void main(String[] args) { 
     Tv t = new Tv("+", "+"); 
     t.close(); // this WILL NOT work 
    } 
} 

這是因爲該方法是private,和私有方法只能被稱爲在那個班裏。