更新记录

【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\)也是同理

super与this无法用在static方法中的更多相关文章

  1. static方法中为什么使用的都是静态变量

    static方法中需要使用静态变量.假设其他类要使用该方法,该方法里面所使用的变量是非静态的,如果该方法所在的类没有实例化,会导致该方法里面的变量不能实例化,自然该static 方法不能使用

  2. java中static特殊性和final(static成员直接被访问,this不能用在static方法中,static不可访问非static)

    java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,不依赖类特定的实例,被类的所有实例共享. 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中 ...

  3. 为什么static方法中不可以调用非static方法

    Java是面向对象的语言,所有的变量,方法都是针对对象而言的.一般来说,要调用一个方法,你需要new 这个方法的对象. 什么时候用static? 如果你想要: 对于一个类的所有对象共享一个变量或者是方 ...

  4. 小鱼提问3 static方法中可以访问某个类的私有变量吗(不通过反射的其他非正常手段)?什么情况下可以?

    class Student { private string _name; public int Age = 0; public static void Test() { Student stu = ...

  5. static方法不能直接访问类内的非static变量和不能调用this,super语句分析

    大家都知道在static方法中,不能访问类内非static成员变量和方法.可是原因是什么呢? 这首先要从static方法的特性说起.static方法,即类的静态成员经常被称为"成员变量&qu ...

  6. static方法和非static方法的区别

    ●生命周期(Lifecycle):静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭. ...

  7. 是否可从一个static方法内发出对非static方法的调用?

    不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用.也就是说,当一个static方法被调用时, ...

  8. 是否可以从一个static方法内部发出对非static方法的调用

    不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方 法调用,而static方法调用时不需要创建对象,可以直接调用.也就是说,当一个static方法被调用时 ...

  9. 是否可以从一个static方法内部调用非static方法?

    不可以.静态成员不能调用非静态成员. 非static方法属于对象,必须创建一个对象后,才可以在通过该对象来调用static方法.而static方法调用时不需要创建对象,通过类就可以调用该方法.也就是说 ...

随机推荐

  1. 初识HttpRunner

    一.背景 前段时间接触到HttpRunner自动化测试框架,发现对测试人员代码能力要求极低,用户只需准备好用例脚本即可发起测试,非常方便,故记录一下. 二.安装 运行环境 HttpRunner框架基于 ...

  2. NOIP-- 模拟-----机器

    机器翻译 题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  3. java 生成/解读 二维码

    package com.rails.util; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; ...

  4. IDEA部署项目,并结合Shell脚本运行Java程序

    一.概述 在实际开发中,我们写好的代码,往往打成war包或jar包,通过winscp或其他软件将其上传至服务器,然而这样非常大的一个弊端就是不利于开发,为什么这么说呢?假如我们刚刚将springboo ...

  5. php引入html页面 css报错 404

    php引入html页面 css报错 404, html页面内 有css, 有一样 是这么写的 结果就报错了, 原来是 -moz这一句,在这句前面随便加一句别的样式就可以....

  6. buu Crypto 刷题记录

    1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...

  7. [LeetCode] 735. Asteroid Collision

    行星碰撞. 题意是给一个数组 asteroids,表示在同一行的行星.对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动).每一颗行星以相同的速度移 ...

  8. Ubuntu 16.04 安装ROS sudo rosdep init报错问题

    解决博文:https://blog.csdn.net/weixin_37835458/article/details/79878785 输入sudo rosdep init报错如下: Tracebac ...

  9. WLC3504 HA配置

    1.WLC3504 HA连接方式 2.说明 WLC3504可以支持HA,AP SSO和Client SSO. 也是通过RP端口去连接,从active到standby-hot设备同步设备配置包括mana ...

  10. ASA-有关AAA用户登录的问题

    问题示例:I have created a test user that is set to privilege 15 in the config: When I log in to the ASA ...