super详解
1.super和this的区别
super调用的是父类的属性或方法,this是调用当前类的属性或者方法。
(1)super和this关于属性的调用
(2)super和this关于方法的调用
(3)代表的对象不同:
this:代表本身调用者这个对象
super:代表父类对象的引用
(4)使用前提条件不同:
this:在没有继承关系中也可以使用
super:只能在继承条件下才可以使用
(5)构造方法:
this:默认调用本类的构造器
super:默认调用的是父类的构造器
2.构造器在继承中的调用顺序
3.有参无参在继承中的注意点
下图子类无参构造报错的原因是:当父类写了有参构造器而没有显示定义无参构造器,则父类的有参构造器会自动干掉其无参构造器,而子类无参构造器在使用前会先调用父类的无参构造器,父类的无参被有参干掉,导致子类也无法使用无参构造器。
以上错误有两种解决方法:
(1)父类中重写了有参构造器之后,显示定义无参构造器
(2)在子类中调用父类的有参构造即可。如下图:
注:若在子类中不显示写super则默认调用的是无参构造,在父类重写有参构造器的前提下,想要不报错,父类中必须显示定义无参构造器
4.super在使用时的注意点
(1)当super调用父类的构造方法时必须在子类构造方法的第一行。
(2)super只能出现在子类的方法或构造方法中。
(3)super和this不能同时调用构造方法,因为这两都必须要在构造方法的第一行,因此不能同时在构造方法中使用。
点击查看代码
package com.Tang.oop.demo05;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test("唐");
System.out.println("=============");
student.test1();
}
}
package com.Tang.oop.demo05;
//子类继承父类之后,就会拥有父类的全部方法
public class Student extends Person{
public Student() {
super("Twq");//影藏了super代码:调用了父类的无参构造
System.out.println("Student无参构造执行了");
}
private String name="Twq";
public void print(){
System.out.println("Student");
}
public void test1(){
print();//Student
this.print();//Student
super.print();//Person
}
public void test(String name){
System.out.println(name);//唐
System.out.println(this.name);//Twq
System.out.println(super.name);//jianduan
}
}
package com.Tang.oop.demo05;
public class Person {
public Person(){
}
public Person(String name) {
System.out.println("Person无参构造执行了");
}
protected String name="jianduan";
public void print(){
System.out.println("Person");
}
}
super详解的更多相关文章
- Objective-C中 Self和 Super详解
Objective-C中 Self和 Super详解 Objective-C 中Self 和 Super 详解本文要介绍的内容,在 Objective-C 中的类实现中经常看到这两个关键字 self ...
- 第十一章、super()详解
目录 第十一章.super()详解 一.引出super()来由 第十一章.super()详解 一.引出super()来由 原始用法: 在python类的方法中,要调用父类的某个方法,通常是类.方法() ...
- Python中super详解
转至:https://mozillazg.com/2016/12/python-super-is-not-as-simple-as-you-thought.html 说到 super, 大家可能觉得很 ...
- Objective-C 的 self 和 super 详解 (用简单程序说明问题)
在 Objective-C 中的类实现中经常看到这两个关键字 "self" 和 "super",以以前 oop 语言的经验,拿 c++ 为例,self 相当于 ...
- python super详解
一.super() 的入门使用 - 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能, 这时,我们就需要调用父类的方法了,可通过使用 super 来实 ...
- 9.Super详解
super注意点: surper()是调用父类的构造方法,而且必须在构造方法的第一个 super必须只能出现在子类的方法或者构造方法中! super()和this()不能同时调用构造方法! Vs th ...
- Java面向对象系列(8)- Super详解
场景一 场景二 场景三 场景四 注意:调用父类的构造器,super()必须在子类构造器的第一行 场景五 场景六 super注意点 super调用父类得构造方法(即构造器),必须在构造方法得第一个 su ...
- Python中的Super详解
这篇文章我们来介绍一下 super,我相信大部分的人使用 super 都是使用这种方式: # 就是我有一个 class 比如说是 Male,然后继承另外一个 class 比如是 Person,然后我在 ...
- java.super详解
package Demo.oop.APP.Demo03; //demo3包的启动器 //此启动器用于继承 public class application { public static void m ...
随机推荐
- 广度优先搜索 BFS 学习笔记
广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...
- Elemnt ui 组件封装(table)
<template> <div class="table"> <el-table :data="tableData2" :bord ...
- [AcWing 26] 二进制中1的个数
点击查看代码 class Solution { public: int NumberOf1(int n) { unsigned un = n; int res = 0; while (un) { re ...
- GitStats - 统计Git所有提交记录工具
如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况: 该仓库的代码谁提交的代码最多 该仓 ...
- 漫谈 HTTP 连接
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 本文首先会 HTTP 的特点和优缺点,然后会详细介绍 HTTP 长连接和短连接的连接管理,通过 ...
- Vue.js 3.x 中跨层级组件如何传递数据?
provide/inject 基本用法 在 Vue.js 中,跨层级组件如果想要传递数据,我们可以直接使用 props 来将祖先组件的数据传递给子孙组件: 注:上图来自 Vue.js 官网:Prop ...
- C#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路
当我们将CT切片重建为三维体之后,通常会消除一些不必要的外部组织来观察内部病灶, 一般思路是根据人体常见CT值范围来使得部分组织透明来达到效果, 但这是非黑即白的,即,要么显示皮肤,要么显示神经,要么 ...
- 关于前端ajax请求获取数据成功之后无法操作数据的原因及解决方法
前言:做项目的时候我用ajax请求json数据,遍历使用数据时却发现页面无响应.关于这个问题今天有个朋友又问了我一次,记录一下.由于我没有记录,这里用我朋友的图片. 代码现象: 这里他是使用alert ...
- python入门基础知识二(字符串的常用操作方法)
下标/索引: a = "I'm interested in Python." print(a[4]) i # 英文的字符串每一个下标/索引对应一个字母(含标点) a = '我喜欢p ...
- Event Loop 是什么?
Event Loop 是什么? 本文写于 2020 年 12 月 6 日 广义上来说 Event Loop 并不是 JavaScript 独有的概念,他是一个计算机的通用概念. 狭义上来说,只有 No ...