繁体   English   中英

为什么我们不能在扩展类的静态方法中使用此实例?

[英]Why can't we use this instance in the static method of extended class?

基类

class Basics415 {   

    Basics1 b1 = new Basics1();

    public static void main_hooo(){
        out.println("1234");     
    }

    void main_ho(){

    }

}

扩展类

public class Basics5 extends Basics415{     

    public static void main(String[] args){

        this.main_hooo();  // this line throws error.
    }

}

为什么我们不能在扩展类的静态方法中使用此实例?

您的main方法是静态的,这意味着没有与之关联的Basic实例,因此this不起作用。 要访问Basics415的静态方法,您应该像这样明确地引用它们:

public class Basics5 extends Basics415{
    public static void main(){
        Basics415.main_hooo();
    }
}

由于Basic5扩展了Basic415您也可以这样做。 两者都可以接受,但是您的组织可能有自己的样式准则:

public class Basics5 extends Basics415{
    public static void main(){
        main_hooo();
    }
}

那不是访问静态方法的正确方法。 this不是静态的。 取而代之的是Basic5.main_hooo()

this和static彼此相反,就这么简单。如果要使用它,请在非静态方法中使用它。

如果要首先执行main()方法,则必须使用String []参数定义它。 而且,main()是静态方法(它属于该类)。 没有要引用的实例。

使用类名称在main中调用它:

Basics415.main_hooo();  // this line no longer throws an error.

对于不需要创建对象的静态方法,

    public static void main(String[] args) {
        Basics415 b = new Basics415();
        b.main_hooo();// output : 1234
        main_hooo();// output : 1234
        Basics415.main_hooo();// output : 1234
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM