如果在主类中初始化了第一个类,如何从另一个子类中调用子类?它是这样的:
public class main {
Sub1 test = new Sub1();
Sub2 test2 = new Sub2();
Sub2.bummer2();
}
子类1:
public class Sub1 {
public static void bummer() {
System.out.println("got called");
}
}
另一个子类:
public class Sub2 {
public static void bummer2() {
//here i want to execute Sub1.bummer() without having to initialise it first
}
}
我该怎么做?
答案 0 :(得分:3)
只需致电Sub1.bummer()
即可。无需创建任何实例来调用静态方法。这可以从任何类调用,因为它是一个公共静态方法。
答案 1 :(得分:2)
这些都不是子类,但您可以调用Sub1.bummer()
,因为bummer()
是public static
。当你说你不想先把它初始化时,我不知道你的意思。
答案 2 :(得分:1)
由于它是公共的和静态的,所以在Sub2中你可以调用
Sub1.bummer();
答案 3 :(得分:1)
静态方法附加到类,而不是类的实例,因此您永远不需要创建test1
或test2
,除非您遗漏了一些偷偷摸摸的副作用。这就是你所需要的:
public class Sub2 {
public static void bummer2() {
Sub1.bummer();
}
}
就是这样。
答案 4 :(得分:1)
如果您打算将无赖功能设为静态,那么上述每个人的答案都是正确的。但是,如果您希望函数是实例方法,那么decorator模式可能会为您提供所需的信息
E.g。
abstract class Mybase
{
abstract void bummer();
}
class Sub1 extends Mybase
{
public Sub1() {
}
void bummer() {System.out.println(" sub1 is bummed ");};
}
class Sub2 extends Mybase
{
Mybase b;
public Sub2(Mybase b) {
this.b = b;
}
void bummer() {b.bummer(); System.out.println(" sub2 is bummed ");}
}
class Sub3 extends Mybase
{
Mybase b;
public Sub3(Mybase b) {
this.b = b;
}
void bummer() {b.bummer(); System.out.println(" sub3 is bummed ");}
}
然后执行
Mybase m1 = new Sub3(new Sub2(new Sub1()));
m1.bummer();
输出
sub1 is bummed
sub2 is bummed
sub3 is bummed