我不确定标题是否准确。我有几个类,如电视,我想只在一个类中使用它们。是否可以在另一个类中调用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
?
答案 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
方法,它都会创建Remote
和Tv
的新实例,然后调用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
}
}
此外,如果TvSet
和Tv
都在同一个套餐中,您可以在方法上使用默认访问修饰符,而不是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
,私有方法只能在该类中调用。