super关键字什么时候使用?super的适用场景是?
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的适用场景是?相关推荐
- This和Super关键字的对比
this和Super关键字 this和Super关键字的对比 Super关键字的用法如下: 1. super关键字代表了父类空间的引用: 2. super关键字的作用: 3. super关键字调用父类 ...
- 1.4 super关键字详解
由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性. super 关键字的功能: 在子类的构造方法中显 ...
- 继承的概念和实现 、 super关键字 、 Object常见方法、抽象类、接口、模板方法模式、成员内部类、匿名内部类
这篇博客将会涉及到: 继承的概念和实现 super关键字 方法重写-Override Object常见方法 继承的概念: 生活中,继承的概念随处可见,继承需要符合的关系:is-a:父类更通用.子类更特 ...
- java super关键字_Java入门(二)下
点击蓝字关注我们 01 面向对象三大特性(2)---继承 一. 概念 继承是java三大特性之一(封装装,继承,多态).继承是从已有的类中派生出新的类.新的类继承原有类所有的属性和行为,并能拓展新的能 ...
- 1.4 面向对象编程中级 对象的继承与super关键字-跟着韩老师学JavaSE
大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! [零基础 快速学Java]韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利 ...
- 第八章第一节:Java继承之继承概念、语法、成员访问和super关键字
文章目录 一:继承的概念及语法 (1)什么是继承 (2)Java继承语法 二:成员访问 (1)子类访问父类的成员变量 (2)子类访问父类的成员方法 三:super关键字 (1)super关键字 A:作 ...
- Java中super关键字及其作用
Java中super关键字及其作用 super关键字及其作用 A:super关键字指代父类对象引用(super代表父类存储空间的标识) B:作用: a:访问被子类隐藏的父类同名成员变量和成员方法 : ...
- Java学习第八天之super关键字的概念
super关键字的特点: ·super和this关键字的特点类似:super代表的是父类对象的引用. ·当子父类的成员出现同名时,可以通过super来区分. ·子类的构造方法中,通过super关键字调 ...
- super关键字,多态
一.super关键字 1.1 定义 super表示父类对象的引用 可以调用父类中非私有的成员属性和成员方法 调用属性 super.属性名 调用方法 super.方法名(参数列表) 调用构造方法 sup ...
- python继承super函数_Python中的super函数如何实现继承?
本篇文章给大家带来的内容是关于Python 中的super函数如何实现继承?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Py 2.x 和 Py 3.x 中有一个很大的区别就是类,无 ...
最新文章
- 阿里P7背调红灯:被前前公司说坏话,修改领导名被查!
- linux下各种颜色的文件表示的文件类型
- 华为这台「技术暴力输出机」,亮出「云原生2.0」,研发效率飙升10倍!
- python异常值处理实例_Python异常值处理与检测
- JSR303—Bean Validation验证
- 指数随机变量 泊松过程跳_《常见随机过程》(一)
- centons7编译安装zabbix3.4【转https://www.cnblogs.com/kowloon/p/7771495.html】
- gorm crud简单代码示例
- spring 源码分析01
- 使用Nexus创建私服
- mysql循环建表_MySQL 开发准则(总结自阿里巴巴开发手册)
- Excel导入SQL数据库出现的问题
- 如何验证 nginx.conf 是否配置正确
- 获取浏览器的User Anent及判断微信浏览器
- 超详细的TypeScript入门教程!
- ArcEngine实现要素类排序的四种方法
- jquery省市县三级联动
- 【Linux学习】基本操作
- 序列化和反序列化的概念及应用
- SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解
热门文章
- 【基础算法】穷举算法 (暴力枚举) C++实现
- 雷军:为什么马云马化腾创业那么容易成功 自己却需要煎熬数年
- 已解决org.springframework.context.annotation.ConflictingBeanDefinitionException异常的正确解决方法,亲测有效!!!
- 知云文献翻译打不开_推荐一款文献翻译软件,免费又高效的那种
- jmeter+csv+ant接口自动化测试--利用apache-ant执行测试用例并生成HTML格式测试报告(二)
- Landsat5数据下载中国地区1988年
- 2018函授英语计算机统考,大学英语b网络统考
- 上海熙有网络科技集团有限公司获顺为资本数千万元天使轮融资
- 为什么要学好数学,计算机与数学的关系,学习数学的过程
- 【扩展欧几里得】Codeforces Round #406 (Div. 2) A. The Monster