super与this无法用在static方法中

2020-02-08 16:04:22来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

super与this无法用在static方法中

更新记录

【1】2020.02.08--10:32

1.主要编辑了super

正文

我原本是在学习\(super\)关键字,后来突发奇想,能不能在父类中用\(super\)间接调用本类方法呢?
也就是说父类的方法(假设方法名为\(printData\)),通过子类的\(super\)去间接调用。
于是,就有了这样的一段代码:

class ChildClass extends Class2{
    public static void print() {
        super.printData();
    }
}
public class Class2 {
    protected void printData() {
        System.out.println("调用父类printData方法");
    }
    public static void main(String[] args) {
        ChildClass.print();
    }
}

结果出现这样一段错误:Cannot use super in a static context
原因非常清楚。
我又写了一段代码:

class ChildClass extends Class2{
    public void printData() {
        super.printData();
    }
}
public class Class2 {
    protected void printData() {
    System.out.println("调用父类printData方法");
    }
    public static void main(String[] args) {
        new ChildClass().printData();
    }
}

运行结果:调用父类printData方法
反过头来,为什么不可以在\(static\)方法中使用\(super\)
看看\(static\)方法有什么性质
它是静态方法
静态?

会随着类的定义而被分配和装载入内存中。
而且它是类方法,类方法是属于整个类的,用类名去调用。

有了上述了解,配合下面的代码就会理解

class ChildClass extends Class2{
    public static void printData() {
        //super.XXX();
    }
}
public class Class2 {
    public static void main(String[] args) {
        ChildClass.printData();
    }
}

看看编译时\(super\)去调用谁呢
静态方法先存在,然后对象再存在,所以编译静态方法时,对象还没出现
此时\(super\)指向的是空,当然不被编译器认可,\(this\)也是同理


原文链接:https://www.cnblogs.com/zythonc/p/12275799.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:SpringBoot 集成MyBatis、事务管理

下一篇:activiti 全局流程监听ActivitiEventListener,实现监听不同类型