JAVA入门级教学之(super关键字)
目录
JAVA入门级教学之(super关键字)
1.super关键字用在构造方法中:
2.语法规则:
3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样
4.通过子类的构造方法去调用父类的构造方法
5.super();调用了父类中的构造方法,但是不会创建父类对象 ,只是为了给当前子类对象中的父类型特征赋值
6.为什么super();不会创建对象呢?
7.因此:构造方法执行,不一定创建对象【这个的意思指的是super关键字的意思】
8.父类的构造方法并不会被子类继承,但是可以被子类去调用
JAVA入门级教学之(super关键字)
1.super关键字用在构造方法中:
语法:
super(实参);【通过子类的构造方法去调用父类的构造方法】
this(实参);【通过一个构造方法去调用另一个构造方法,实现代码重用,调用当前对象的构造方法】
2.语法规则:
一个构造方法第一行如果没有this();也没有显示的去调用super();
系统会默认调用super();并且是一级一级往父类去调用
3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样
super()和this()不能共存在同一个构造函数内
构造方法的第一行如果什么都不写的话就会默认调用父类的无参数构造方法【super();】
4.通过子类的构造方法去调用父类的构造方法
作用是:给当前子类对象中的父类型特征赋值
super(值1,值2.....);
5.super();调用了父类中的构造方法,但是不会创建父类对象 ,只是为了给当前子类对象中的父类型特征赋值
6.为什么super();不会创建对象呢?
按道理来说,一个类我们只会给它实现一个对象,但是如果继承过来的东西也实例化的话,相当于实例化了Object,实例化Account,
实例化当前对象,一共有三个对象,这样会导致混乱
7.因此:构造方法执行,不一定创建对象【这个的意思指的是super关键字的意思】
8.父类的构造方法并不会被子类继承,但是可以被子类去调用
补充:
1:super是一个关键字,全部小写
2:super和this对比学习:
this:
this 能出现在实例方法和构造方法中
this 的语法是 this. 或者 this()
this 不能使用在静态方法中
this 大部分情况下可以省略
this 在什么情况下不能省略呢?
在局部变量和实例变量的时候不能省略
public void serName(String name){
this.name=name;
}
this() 只能出现在构造方法的第一行,通过当前的构造方法去调用本类中的其它构造方法,目的是:代码复用
super:
super 能出现在实例方法和构造方法中
super 的语法是 super. 或者 super()
super 不能使用在静态方法中
super 大部分情况下可以省略
super 在什么情况下不能省略呢?
super() 只能出现在构造方法的第一行,通过当前的构造方法去调用父类中的其它构造方法,目的是:创建子类对象的时候,先初始化父类型特征
代码演示:
public class Teat01 {public static void main(String[] args){new B();}
}class A{public A(){System.out.println("这是A类的无参构造方法");}
}class B extends A{public B(){System.out.println("这是B类的无参构造方法");}
}
运行结果:
运行结果分析:
创建对象后,先掉用父类,再调用子类
3:super()
表示通过子类的构造方法调用父类的构造方法
模拟的是现实世界中,要是想要有儿子,先需要有父亲的存在
4:一个类如果没有手动添加任何构造方法,系统会默认提供一个无参构造方法
一个类如果手动添加一个构造方法,那么系统将不会提供无参构造方法
代码演示:
public class Teat01 {public static void main(String[] args){new B();}
}class A{
// public A(){
// System.out.println("这是A类的无参构造方法");
// }public A(int i){}
}class B extends A{public B(){System.out.println("这是B类的无参构造方法");}
}
演示结果:
5:重要结论:
当一个构造方法的第一行:
既没有明显写出this() 又没有明显写出super()
系统会默认添加super()
表示通过当前子类的构造方法调用父类的无参构造方法,所以必须保证父类的无参构造方法是存在的。
因此一般都会显式添加类的无参构造方法
super() 和 this () 不能共存
括号中有参数和无参数也不能共存
他们都只出现在构造方法的第一行
有了一个后不能出现第二个
在java语言中,不管是new什么对象,最后老祖宗的Object类的无参构造方法一定会执行
由于继承关系,所有的类都是继承自一个父类 Object 类,因此Object 类中的无参构造方法一定是最先执行的
object 类的无参构造方式处于 “栈”的顶部
定义一个 Account类:
package com.lbj.javase15;public class Account extends Object{//这里隐藏调用了Object类private String actno;private double balance;public Account() {//这里即使是缺写super();系统也会调用Object的无参构造方法去执行System.out.println("无参数构造器");}public Account(String actno, double balance) {this.actno = actno;this.balance = balance;}public String getActno() {return actno;}public void setActno(String actno) {this.actno = actno;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}}
定义一个DebitAccount类 继承extends Account类:
package com.lbj.javase15;
/*** * 1.super关键字用在构造方法中:* 语法:super(实参);【通过子类的构造方法去调用父类的构造方法】* this(实参);【通过一个构造方法去调用另一个构造方法,实现代码重用,调用当前对象的构造方法】* * 2.语法规则:一个构造方法第一行如果没有this();也没有显示的去调用super();* 系统会默认调用super();并且是一级一级往父类去调用* * 3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样* * super()和this()不能共存在同一个构造函数内* * 构造方法的第一行如果什么都不写的话就会默认调用父类的无参数构造方法【super();】* * 4.通过子类的构造方法去调用父类的构造方法,作用是:给当前子类对象中的父类型特征赋值* super(值1,值2.....);* * 5.super();调用了父类中的构造方法,但是不会创建父类对象 ,只是为了给当前子类对象中的父类型特征赋值* * 6.为什么super();不会创建对象呢?* 按道理来说,一个类我们只会给它实现一个对象,但是如果继承过来的东西也实例化的话,相当于实例化了Object,实例化Account,* 实例化当前对象,一共有三个对象,这样会导致混乱* * 7.因此:构造方法执行,不一定创建对象【这个的意思指的是super关键字的意思】* * 8.父类的构造方法并不会被子类继承,但是可以被子类去调用* * * * * * @author 14811**/
public class DebitAccount extends Account {//独有属性private double debit;public DebitAccount(String actno,double balance,double debit) {super(actno,balance);this.debit = debit;}public DebitAccount() {//super("001",1000.0);//这里调用的是父类的有参数的构造函数//报错super();//单纯调用无参构造函数的时候这里即使不写也会自动存在//报错super("001",1000.0);}public double getDebit() {return debit;}public void setDebit(double debit) {this.debit = debit;}}
定义一个测试类:
package com.lbj.javase15;
/*** * 1.super不是引用类型(this是引用类型,引用的是当前对象),super中存储的不是内存地址,super指向的不是父类对象* * 2.super代表的是当前子类对象中的父类型特征* * 3.什么时候使用super? * 子类和父类中都有某个数据,* 例如:子类和父类中都有name这个属性* 如果要在子类中访问父类中的name属性,需要使用super关键字* * 4.super可以使用在什么地方?* 第一:super可以用在成员方法中,不能用在静态方法中* 第二:super可以用在构造方法中* * 5.this和super相同,都不能用在静态上下文中(static)* * * @author 14811**/
public class Test {public static void main(String[] args) {DebitAccount da=new DebitAccount();da.}}
JAVA入门级教学之(super关键字)相关推荐
- JAVA入门级教学之(标识符与关键字)
目录 JAVA入门级教学之(标识符与关键字) 1.什么是标识符? 2.标识符的命名规则? 3.标识符的命名规范? 4.严格遵守规则和规范: 在java里的关键字都是小写的 JAVA入门级教学之(标识符 ...
- JAVA入门级教学之(abstract抽象类)
目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...
- JAVA入门级教学之(接口)
目录 JAVA入门级教学之(接口) 接口也是一种引用类型,可以等同看做类 1.如何定义接口,语法: 2.接口中只能出现: 3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的 4.接口中没有构造方法 ...
- JAVA入门级教学之(方法-1)
目录 JAVA入门级教学之(方法-1) 1.以下程序不使用"方法",分析一下程序会存在哪些优缺点? 2.方法的本质:是一段代码片段,可以完成特定功能,可以重复利用 3.注意:方法定 ...
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...
- JAVA入门级教学之(package和import)
目录 JAVA入门级教学之(package和import) 1.包又称为package 2.怎么定义package? 3.包名的命名规范: 4.包名要求全部小写,包名也是标识符,必须遵守标识符的命名规 ...
- JAVA入门级教学之(多态)
JAVA入门级教学之(多态) 怎么理解多态:你本身就该喊你爹叫爹,你让你爹叫你爹就是强制认做爹 多态的使用: A a = new D(); D类继承A类,父类型引用指向子类型对象 * 关于java语 ...
- JAVA入门级教学之(参数传递)
JAVA入门级教学之(参数传递) 问题引入: 参数分为形式参数还有实际参数,我们传入是的数据到底是什么呢? 方法调用的时候,涉及参数传递的问题, 传递的时候,java只遵循一种语法机制 就是将变量中保 ...
- JAVA入门级教学之(面向过程和面向对象的区别)
目录 JAVA入门级教学之(面向过程和面向对象的区别) 面向过程和面向对象的区别: -面向过程: -面向对象: -发展历程: -生命周期中包括: -什么是类: -什么是对象: -软件开发的过程: -重 ...
最新文章
- 拆箱装箱有什么作用JAVA_基础--最简单明了的拆箱装箱解释,带实例
- Eclipse开发常用快捷键
- python3字典详解_Python3实现的字典遍历操作详解
- Android成长日记-使用ToggleButton实现灯的开关
- 181009词霸有道扇贝每日一句
- 2019年成都房产新政,有这些内容需注意
- 来自安徽、关心安徽的朋友一定要看!快报记者3点准时登陆在线聊天 - 评说天下 - 19楼互动生活空间
- Leetcode 刷题 - 排序(day4)_颜色排序
- FMI飞马网 |【线上直播】京东商城的通用代码质量提升方案
- 【漏洞复现-coldfusion-文件读取】vulfocus/coldfusion-cve_2010_2861
- chrome插件安装方法教程
- 曾国藩不间断读书做笔记 读书十年始展拳脚
- 计算机跨学科 自然科学基金资助率,科学网—国家自科基金项目资助的教育类项目 - 蒋金和的博文...
- PI 薄膜为何被称之为“黄金薄膜”?
- 已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并,按学号升序排列。
- Java刀_Java尖刀系列3:堆
- java跟踪行为分析_PiggyMetrics
- EOS FoMo 3D狼人杀游戏骗局始末,及两点建议
- 【TVOS】媒体融合 智慧乡村——TVOS绍兴试点项目正式启动
- java中push和pop指令的作用_push和pop的区别?
热门文章
- 双RocketMq集群的搭建
- php: eclipse 编辑 php
- 数据结构与算法——排序
- linux的基础知识——TCP通信状态
- python 二进制数 转字符串_Python二进制串转换为通用字符串的方法
- linux at24测试程序,linux 2.6下eeprom at24c08 i2c设备驱动(new style probe方式)
- 数据卡片_VISA消息:关于VCPS 2.1卡片产品的性能和交叉测试的卡片个性化数据的更新...
- matlab实验符号计算答案,实验7 Matlab符号计算.doc
- python ffmpy3与FFmpeg的安装
- OpenCV学习笔记(九): 漫水填充:floodFill()