0

我不确定标题是否准确。我有几个像电视这样的课程,我想在一个课程中使用所有这些课程。是否可以在另一个类中调用 Tv 中的方法?如果是这样,我是否需要修改 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("+");
    }
}

我试过这个:

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

IDE 提醒我“ identifier expected after this token.” 我应该修改Tv还是RunTv

4

3 回答 3

1

是的,如果其中包含方法定义public,则意味着您可以Tv在其他类中创建对象后调用这些方法。

public是一个访问修饰符,但是公共方法只能在创建该特定类的对象后调用。像这样,

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

阅读文档也很棒,它将指导您如何逐步编写 Java 程序。

于 2012-06-20T22:50:09.630 回答
1

第一个问题已经由冷冻豌豆的猫头鹰和罗迪回答了,但总结一下:是的,您可以调用另一个类中的方法,只要它们是公共的并且您有一个包含该方法的类的实例。

对于“ identifier expected...”错误的其他问题,您应该更改RunTv.

您不能t.open()在方法块之外调用。如果你把它改成这样:

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

然后,每当您调用该openNewTv方法时,它将创建一个新的实例,Remote然后Tv它将调用实例open中的方法Tv。要调用,您可以在您的方法中openNewTv创建一个实例,如下所示:RunTvmain

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

如果您不想每次必须打开一个新实例时都创建一个新实例,Tv您可以将方法设为静态,这意味着它不属于任何实例,而是属于类本身(为了更好地理解这些事情,您应该阅读) 你可以像这样使方法静态:

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();
    }
}

希望这可以帮助。:)

于 2012-06-20T23:20:03.623 回答
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,而私有方法只能在该类中调用。

于 2012-06-20T22:54:09.683 回答