Java继承:super关键字、构造器、final用法
一、继承
继承好处
1、提高代码的重用性
2、提高代码的扩展性和维护性
3、为多态打下了基础
继承类型
继承子类创建对象的过程
二、super关键字的使用
理解:super代表父类的引用,用于访问父类的属性、方法、构造
语法
访问父类的属性:super.属性名 = 值;
访问父类的方法:super.方法(实参列表);
访问父类的构造:super(实参列表);
注意:必须在子类的构造器的第一句
注意:在相对子类中,用super去访问父类的成员
特点
1、当子类需要显式调用父类的构造器时,则必须通过super关键字
2、当子类和父类的成员重名时,为了访问父类的成员,则必须通过super关键字
联想:
当局部变量和当前类的成员变量重名时,可以通过this区分开
当当前类的成员变量和父类的成员变量重名时,可以通过super区分开
注意
1、super的使用不限于直接父类(还可访问爷爷类,找不到再往上找)
2、如果父类和爷爷类中都相同的成员,则默认访问的是父类的成员,遵循就近原则
3、this(实参列表)和super(实参列表)不能同时出现在构造器中
this和super的对比
1.this:代表本类对象,可以访问本类的属性、方法、构造。它的出现主要为了区分成员变量和局部变量,以及调用本类构造器。
通过this访问成员时,先从本类中查找,如果找不到再从直接父类找,如果还找不到,继续往上追溯找间接父类,直到找到为止!
2.super:代表父类引用,可以访问父类的属性、方法、构造。它的出现主要为了区分本类和父类的成员,以及调用父类构造器。
通过super访问成员时,先从直接父类找,如果还找不到,继续往上追溯找间接父类,直到找到为止!
- class Animal {
- void eat() {
- System.out.println("animal : eat");
- }
- }
- class Dog extends Animal {
- void eat() {
- System.out.println("dog : eat");
- }
- void eatTest() {
- this.eat(); // this 调用自己的方法
- super.eat(); // super 调用父类方法
- }
- }
- public class Test {
- public static void main(String[] args) {
- Animal a = new Animal();
- a.eat();
- Dog d = new Dog();
- d.eatTest();
- }
- }
输出结果:
- animal : eat
- dog : eat
- animal : eat
三、构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
- class SuperClass {
- private int n;
- SuperClass(){
- System.out.println("SuperClass()");
- }
- SuperClass(int n) {
- System.out.println("SuperClass(int n)");
- this.n = n;
- }
- }
- // SubClass 类继承
- class SubClass extends SuperClass{
- private int n;
- SubClass(){ // 自动调用父类的无参数构造器
- System.out.println("SubClass");
- }
- public SubClass(int n){
- super(300); // 调用父类中带有参数的构造器
- System.out.println("SubClass(int n):"+n);
- this.n = n;
- }
- }
- // SubClas2 类继承
- class SubClass2 extends SuperClass{
- private int n;
- SubClass2(){
- super(300); // 调用父类中带有参数的构造器
- System.out.println("SubClass2");
- }
- public SubClass2(int n){ // 自动调用父类的无参数构造器
- System.out.println("SubClass2(int n):"+n);
- this.n = n;
- }
- }
- public class TestSuperSub{
- public static void main (String args[]){
- System.out.println("------SubClass 类继承------");
- SubClass sc1 = new SubClass();
- SubClass sc2 = new SubClass(100);
- System.out.println("------SubClass2 类继承------");
- SubClass2 sc3 = new SubClass2();
- SubClass2 sc4 = new SubClass2(200);
- }
- }
输出结果:
- ------SubClass 类继承------
- SuperClass()
- SubClass
- SuperClass(int n)
- SubClass(int n):100
- ------SubClass2 类继承------
- SuperClass(int n)
- SubClass2
- SuperClass()
- SubClass2(int n):200
四、final用法
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
声明类:
- final class 类名 {//类体}
声明方法:
- 修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
注:实例变量也可以被定义为 final,被定义为 final 的变量不能被修改。被声明为 final 类的方法自动地声明为 final,但是实例变量并不是 final
Java继承:super关键字、构造器、final用法的更多相关文章
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- JAVA面向对象-----super关键字
JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...
- java的继承 和super关键字 构造器
面向对象的特性二继承: 继承的好处: 1.减少代码的冗余.提高了代码的复用性 2.便于功能的扩展 3.为之后多态的使用,提供了前提 继承的格式: class A extends B{} A:子类.派生 ...
- java——super关键字、final关键字、throws关键字、访问控制
super关键字: 当父类被重写之后,子类对象无法访问父类被重写的方法,super就是为了解决这个问题: 1.使用super关键字访问父类的成员变量和成员方法: super.成员变量 super.成员 ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- [Java学习]面向对象-super关键字;final关键字
super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...
- Java中super关键字的作用与用法
Java中的super是什么?java中的super关键字是一个引用变量,用于引用父类对象.关键字“super”以继承的概念出现在类中.主要用于以下情况: 1.使用super与变量:当派生类和基类具有 ...
- 重写、super关键字、final关键字、多态、子类型转换、抽象的初步了解
重写 含义 在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖. 重写与重载的 ...
- 24 类:组合 继承 super关键字 面向对象的三大性
组合 组合:自定义类的对象作为另外一个类的属性 class Teacher: def __init__(self, name, age): self.name = name self.age = ag ...
- [18/12/01]super 关键字和final 关键字
一.super 关键字 1.super是直接父类对象的引用.可以通过super来访问父类中被子类覆盖的方法或属性. 使用super调用普通方法,语句没有位置限制,可以在子类中随便调用. 代码示例: c ...
随机推荐
- 29.密码学知识-消息认证码MAC-6——2019年12月19日
1. 消息认证码 1.1 消息认证 消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC. 思考改进方案? 从哈希函数 ...
- man da'te
DATE(1) 用户命令 DATE(1) 名称 日期-打印或设置系统日期和时间 简介 date [OPTION]... ...
- Java——容器(Auto-boxing/unboxing)
[打包/解包] 在Map中需要增加一个数值时,需要new一个对象出来,输出后又得进行强制类型转换,这就造成不便.在JDK1.5中使用Map接口提供了一种新的机制. 在合适的时机自动打包/解包(在J ...
- docker-compose简介
一.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Compose将所管理的容器分为三 ...
- Codeforces Round #351(Div 2)
熬到半夜打结果前一个小时提交代码的页面根本加载不进去,D题写完还因为小点没判被hack掉了... rating什么的都是身外之物了,于是乎喜闻乐见地又掉回绿名了. A题: *题目描述: Bear看一场 ...
- opencv入门教程三
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨) ...
- 【CF1236D】Alice and the Doll(set)
题意:给定一个n*m的网格,其中k格有障碍 周驿东从(1,1)出发面朝右,每次行动前他可以选择顺时针旋转90度或不旋转,然后向自己朝向的位置走1格 问他能否不重复不遗漏的走过所有非障碍格 n,m,k& ...
- Angular项目 Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed.报错
在angular的项目里,一不小心就会出现这个错误[ngRepeat:dupes] ,这个问题是因为内容有重复引起的解决起来挺简单 在对应的ng-repeat指令中增加track by $index, ...
- RedHat下使用gcc编译HelloWorld.cpp
gcc ./HelloWorld.cpp 错误: /tmp/ccZuz3Ca.o:(.eh_frame+0x12): undefined reference to `__gxx_personality ...
- 3D Computer Grapihcs Using OpenGL - 01 环境设置
这系列文章是我学习Youtube上一套OpenGL教程的笔记,自己对教程的案例重新制作并且做了一定程度的修改(更有条理,且修正了一些问题).后续将持续更新. Visual Studio 2017工程 ...