Java:从另一个子类中调用子类

时间:2011-08-22 18:08:32

标签: java

如果在主类中初始化了第一个类,如何从另一个子类中调用子类?它是这样的:

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
    }
} 

我该怎么做?

5 个答案:

答案 0 :(得分:3)

只需致电Sub1.bummer()即可。无需创建任何实例来调用静态方法。这可以从任何类调用,因为它是一个公共静态方法。

答案 1 :(得分:2)

这些都不是子类,但您可以调用Sub1.bummer(),因为bummer()public static。当你说你不想先把它初始化时,我不知道你的意思。

答案 2 :(得分:1)

由于它是公共的和静态的,所以在Sub2中你可以调用

Sub1.bummer();

答案 3 :(得分:1)

静态方法附加到类,而不是类的实例,因此您永远不需要创建test1test2,除非您遗漏了一些偷偷摸摸的副作用。这就是你所需要的:

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