课程之间互动

时间:2012-06-20 22:48:01

标签: java

我不确定标题是否准确。我有几个类,如电视,我想只在一个类中使用它们。是否可以在另一个类中调用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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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的新实例,然后调用open中的Tv方法实例。要致电openNewTv,您可以在RunTv方法中创建main的实例,如下所示:

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

希望这会有所帮助。 :)

答案 2 :(得分: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,私有方法只能在该类中调用。