11.4 super关键字
子父类中构造方法的调用:
在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
格式:
调用本类中的构造方法
this(实参列表);
调用父类中的空参数构造方法
super();
调用父类中的有参数构造方法
super(实参列表);
实例代码:
public class Person {
int a = 1;
public Person(){
System.out.println("父类构造方法");
a=5;
}
}
/*
* 子类中,super()的方式,调用父类的构造方法
* super()调用的是父类的空参数构造
* super(参数) 调用的是父类的有参数构造方法
*
* 子类的构造方法, 有一个默认添加的构造方法
* 注意: 子类构造方法的第一行,有一个隐式代码 super()
* public Student(){
* super();
* }
* 子类的构造方法第一行super语句,调用父类的构造方法
*/
public class Student extends Person{
public Student(){
super();
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.a);
}
}
运行结果:
子类对象创建过程的细节:
实例代码:
public class Person extends Object{
public Person(int a) {
System.out.println(a);
}
}
/*
构造方法第一行,写this()还是super()
不能同时存在,任选其一,保证子类的所有构造方法调用到父类的构造方法即可
小结论: 无论如何,子类的所有构造方法,直接,间接必须调用到父类构造方法
子类的构造方法,什么都不写,默认的构造方法第一行 super();
*/
public class Student extends Person{
public Student(){
//调用的是自己的构造方法
//间接形式调用到了父类的构造方法
this("abc");
}
public Student(String s){
super(1);
}
}
public class Test {
public static void main(String[] args) {
new Student();
}
}
运行结果: 1
如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?
这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
父类构造方法中是否有隐式的super呢?
有的。记住:只要是构造方法默认第一行都是super();
父类的父类是谁呢?super调用的到底是谁的构造方法呢?
Java体系在设计,定义了一个所有对象的父类Object
注意:
类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。
super关键字的应用:
实例代码:
/*
* Student类和Worker有相同成员变量,name age
* 继承的思想,共性抽取,形成父类
* Person,抽取出来父类
* 成员变量,私有修饰
* 同时需要在创建学生和工人对象就必须明确姓名和年龄
* new Student, new Worker 姓名,年龄明确了
*/
public class Person {
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/*
* 同时需要在创建工人对象就必须明确姓名和年龄
* new Worker 同时给出姓名和年龄
* new Worker("ABC",20)
*/
public class Worker extends Person{
public Worker(String name,int age){
super(name, age);
}
}
public class Student extends Person{
public Student(String name,int age){
super(name,age);
}
}
public class Test {
public static void main(String[] args) {
//创建工人对象, Worker,指定姓名年龄
Worker w = new Worker("光头强", 30);
System.out.println(w.getName());
System.out.println(w.getAge());
//创建学生对象, Student,指定姓名年龄
Student s = new Student("肥波", 5);
System.out.println(s.getName());
System.out.println(s.getAge());
}
}
运行结果:
11.4 super关键字相关推荐
- Java基础学习总结(8)——super关键字
2019独角兽企业重金招聘Python工程师标准>>> 一.super关键字 在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式
一.继承的概念及用法 继承背后的思想就是 基于已存在的类来构建新类 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...
- Java super关键字
super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...
- Java知多少(28)super关键字
super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...
- Java中继承、this关键字、super关键字
继承: 概述:当多个类中存在相同属性和行为时,将这些相同的内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承抽离出来的这个类即可. 子类:当某个类继承了另一个类的时候,可以把这个某类 ...
- 面向对象随笔(super关键字)
一.super关键字 1.super的三个作用 1)调用父类的成员变量 示例代码: 1 public class A { 2 int a = 1;//父类成员变量a 3 } 4 5 public cl ...
- Java中this关键字和super关键字用法
构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个类有多个构造方法,可以在一个构造方法中通过 ...
- this和super关键字,就近原则和追根溯源原则
1 this关键字 1.this的含义 this代表当前对象 2.this使用位置 this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁 this在 ...
- day0717(继承的概念、super关键字、方法的重写)
面向对象-继承 子类继承父类继承父类所有非私有的属性与方法 为什么要有继承? 因为在进行开发过程中往往存在多个类拥有共同特性(属性)与行为(方法)的情况,而且这些特性与行为还一致,这个时候往往就会将一 ...
最新文章
- c++的:: . :-的区别
- [数据结构]表达式求值
- 安卓2.2系统上网设置
- 江西省普通高中学业水平考试计算机,2020江西省普通高中学业水平考试缴费平台...
- .net面试题目51-100
- Ⅴ:zookeeper的相关Java Api
- mysql5.6编译_mysql5.6编译安装
- HTML高亮标签<mark></mark>
- C++与C语言中有关数组中元素排序
- Java DataOutputStream writeChars()方法及示例
- NodeJs——(14)express框架的send()方法简介
- 17-基于51单片机的银行排队叫号系统设计
- VMware虚拟机安装教程
- 传统模式下安装linux,在将引导顺序更改为传统模式或在传统模式下安装操作系统时找不到引导设备...
- 网络管理员面试时常用的问题及答案
- 【IoT】产品外包策略:外包地图-充分利用内外部资源
- 认识计算机软件的教学过程,《认识计算机》教学设计
- Android安卓身份证识别SDK
- Windows上使用ssh密钥连接Linux(以centos7为例)和Windows与Windows的免密钥连接
- 云平台(用户、配额管理)