1.当子类继承父类时,子类的无参构造器默认调用super。

我们来看下面这个案例:

package com.kxy.super_;class A {A() {System.out.println("我是父类构造器中的方法");}
}class B extends A {B() {System.out.println("我是子类构造器中的方法");}
}public class Super01 {public static void main(String[] args) {B b = new B();}
}

当我运行以上这段程序,结果是这样的:

我是父类构造器中的方法
我是子类构造器中的方法

你会发现,当我实例化子类对象的时候,父类中的构造器方法被调用了。为什么会这样呢?这是因为,其实在子类中的构造器中的首行默认添加了一行代码:

class B extends A {B() {super();//我在这里!!look me!我的作用是调用父类无参构造器的方法!!System.out.println("我是子类构造器中的方法");}
}

其实,只要是继承关系的类,它的构造器的首行都会有这行代码。

2.调用父类的构造器时,可以使用super。

package com.kxy.super_;class A {A() {System.out.println("父类无参构造器中的方法A()被调用了");}A(int n){System.out.println("父类有参构造器中的方法A(int)被调用了");}
}class B extends A {B() {super(1);}B(int n){super();}
}public class Super02 {public static void main(String[] args) {B b1 = new B();B b2 = new B(1);}
}

运行结果如下:

父类有参构造器中的方法A(int)被调用了
父类无参构造器中的方法A()被调用了

可以发现,无论在哪个子类构造器中,都可以自由的选择调用父类的哪个构造器,但是一个构造器里只能存在一个super,并且只能存在于首行 。

3.访问父类中的属性或方法时,可以使用super。

package com.kxy.super_;class A {public int x = 100;protected int y = 99;private int z = 333;public void show() {System.out.println("A中的方法被调用...");}
}class B extends A {int getNum() {super.show();//调用父类中的方法//System.out.println(super.z);//无法访问父类中的私有属性,会报错return super.x + super.y;//返回父类中的属性}
}public class Super03 {public static void main(String[] args) {B b = new B();System.out.println(b.getNum());}
}

本案例中,我们使用super,在子类的成员方法中对父类属性进行访问,并且调用了父类的成员方法。但即便是这样,super仍然要遵循私有变量不可访问的规则。上述代码的运行结果是:

A中的方法被调用...
199

4.super的访问不限于直接父类;如果多个基类都有同名的成员属性或成员方法,使用super访问遵循就近原则。

package com.kxy.super_;
class A{int x=100;
}
class B extends A{int y=10;
}
class C extends B{void getX() {System.out.println(super.x);}
}
public class Super04 {public static void main(String[] args) {C c=new C();c.getX();}
}

运行结果:

100

所以确切的来说,super的访问不限于直接父类,基类也是可行的

总结:

super的适用场景是哪些呢?

1.当子类继承父类时,子类的无参构造器默认调用。

2.调用父类的构造器。

3.访问父类中的属性,方法。

4.super的访问不限于直接父类;如果多个基类都有同名的成员属性或成员方法,使用super访问遵循就近原则。

下面是this和super的区别:

super关键字什么时候使用?super的适用场景是?相关推荐

  1. This和Super关键字的对比

    this和Super关键字 this和Super关键字的对比 Super关键字的用法如下: 1. super关键字代表了父类空间的引用: 2. super关键字的作用: 3. super关键字调用父类 ...

  2. 1.4 super关键字详解

    由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性. super 关键字的功能: 在子类的构造方法中显 ...

  3. 继承的概念和实现 、 super关键字 、 Object常见方法、抽象类、接口、模板方法模式、成员内部类、匿名内部类

    这篇博客将会涉及到: 继承的概念和实现 super关键字 方法重写-Override Object常见方法 继承的概念: 生活中,继承的概念随处可见,继承需要符合的关系:is-a:父类更通用.子类更特 ...

  4. java super关键字_Java入门(二)下

    点击蓝字关注我们 01 面向对象三大特性(2)---继承 一. 概念 继承是java三大特性之一(封装装,继承,多态).继承是从已有的类中派生出新的类.新的类继承原有类所有的属性和行为,并能拓展新的能 ...

  5. 1.4 面向对象编程中级 对象的继承与super关键字-跟着韩老师学JavaSE

    大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! [零基础 快速学Java]韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利 ...

  6. 第八章第一节:Java继承之继承概念、语法、成员访问和super关键字

    文章目录 一:继承的概念及语法 (1)什么是继承 (2)Java继承语法 二:成员访问 (1)子类访问父类的成员变量 (2)子类访问父类的成员方法 三:super关键字 (1)super关键字 A:作 ...

  7. Java中super关键字及其作用

    Java中super关键字及其作用 super关键字及其作用 A:super关键字指代父类对象引用(super代表父类存储空间的标识) B:作用: a:访问被子类隐藏的父类同名成员变量和成员方法 : ...

  8. Java学习第八天之super关键字的概念

    super关键字的特点: ·super和this关键字的特点类似:super代表的是父类对象的引用. ·当子父类的成员出现同名时,可以通过super来区分. ·子类的构造方法中,通过super关键字调 ...

  9. super关键字,多态

    一.super关键字 1.1 定义 super表示父类对象的引用 可以调用父类中非私有的成员属性和成员方法 调用属性 super.属性名 调用方法 super.方法名(参数列表) 调用构造方法 sup ...

  10. python继承super函数_Python中的super函数如何实现继承?

    本篇文章给大家带来的内容是关于Python 中的super函数如何实现继承?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Py 2.x 和 Py 3.x 中有一个很大的区别就是类,无 ...

最新文章

  1. 阿里P7背调红灯:被前前公司说坏话,修改领导名被查!
  2. linux下各种颜色的文件表示的文件类型
  3. 华为这台「技术暴力输出机」,亮出「云原生2.0」,研发效率飙升10倍!
  4. python异常值处理实例_Python异常值处理与检测
  5. JSR303—Bean Validation验证
  6. 指数随机变量 泊松过程跳_《常见随机过程》(一)
  7. centons7编译安装zabbix3.4【转https://www.cnblogs.com/kowloon/p/7771495.html】
  8. gorm crud简单代码示例
  9. spring 源码分析01
  10. 使用Nexus创建私服
  11. mysql循环建表_MySQL 开发准则(总结自阿里巴巴开发手册)
  12. Excel导入SQL数据库出现的问题
  13. 如何验证 nginx.conf 是否配置正确
  14. 获取浏览器的User Anent及判断微信浏览器
  15. 超详细的TypeScript入门教程!
  16. ArcEngine实现要素类排序的四种方法
  17. jquery省市县三级联动
  18. 【Linux学习】基本操作
  19. 序列化和反序列化的概念及应用
  20. SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解

热门文章

  1. 【基础算法】穷举算法 (暴力枚举) C++实现
  2. 雷军:为什么马云马化腾创业那么容易成功 自己却需要煎熬数年
  3. 已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!!
  4. 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
  5. jmeter+csv+ant接口自动化测试--利用apache-ant执行测试用例并生成HTML格式测试报告(二)
  6. Landsat5数据下载中国地区1988年
  7. 2018函授英语计算机统考,大学英语b网络统考
  8. 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
  9. 为什么要学好数学,计算机与数学的关系,学习数学的过程
  10. 【扩展欧几里得】Codeforces Round #406 (Div. 2) A. The Monster