博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承的理解
阅读量:38381 次
发布时间:2022-02-22

本文共 2208 字,大约阅读时间需要 7 分钟。

1.什么是继承,了解继承中构造器的使用

对继承的理解

  • 继承是子类调用父类的属性和方法,在java中通过extends关键字实现。
  • 子类不能调用父类private修饰的属性和方法;
  • 继承是类与类之间的一种关系;
  • 一个子类只能继承一个父类,一个父类能被多个子类继承;
  • 子类与父类是is a的关系;

继承中构造器的使用

在具有继承关系对象的创建过程中,构建子类对象会先构建父类对象,先走父类构造器。

super():表示调用父类无参构造方法,如果没有显示书写,则默认隐式存在于子类构造方法的首行

public class Test {
public static void main(String[] args) {
new C(); }}class A{
public A(){
System.out.println("A"); }}class B extends A{
public B(){
super(); System.out.println("B"); }}class C extends B{
public C(){
super(); System.out.println("C"); }}

如果父类没有显示的无参构造方法时,子类继承父类,则需要在子类构造器中调用父类的有参构造方法;

class A{
public A(String A){
System.out.println("A"); }}class B extends A{
public B(){
super(null); System.out.println("B"); }}

2.理解this和super关键字

this关键字

类是模板,可服务于此类的所有对象;this代表当前实例,是类中的默认引用;当类服务于某个对象时,this则指向这个对象

//当创建s1对象时,this指向0x0000AO01,访问的name属性即是Ox0000A001地址中的name空间;//当创建s2对象时,this指向Ox0000B002,访问的name属性即是Ox0000B002地址中的name空间;public class Test {
public static void main(String[] args) {
Teacher s1 = new Teacher(); s1.sayHi(); Teacher s2 = new Teacher(); s2.sayHi(); }}class Teacher{
String name; public void sayHi(){
System.out.println(this.name); }}

this的两种用法

  • 通过this. 调用实例属性、方法;
  • 通过this(),this(实参)调用其他构造函数;

**注意:**构造器在调用其他构造器的时候要放在构造器的首行,还要防止构造递归,造成死循环。

Super关键字

在子类中可直接访问父类的属性和方法,当子类中的属性和方法与父类发生遮蔽和重写,需要加以区分,才可以专项访问。

public class TestSuperKeyword ipublic static void main(String[] args) {
B b = new B(); b.print(); }}class A{
int value = 10;}class Bextends A{
int value = 20;public void print(){
int value = 30; System.out.print1n(value); System.out.print1n(this.value);System.out.print1n(super.value); }}//运行结果30 20 10//父子类属性同时存在不存在重写,子类遮蔽父类属性,需要使用不同前缀进行访问。

子类的默认无参构造器默认隐藏super()先执行父类的无参构造器。super()默认放在第一行。

super关键字的用法

1.第一种用法

  • 在子类方法中使用super. 的形式访问父类的属性和方法;
  • 例如super.父类属性, super.父类方法;

2.第二种用法

  • 在子类的构造方法的首行,使用super() super(实参),调用父类构造方法;

为什么this和super不能同时存在

如果一个类继承了其他类,那当初始化时super会默认调用父类的无参构造方法,或super调用有参的构造方法,然后再完成子类特有属性的初始化。而在构造函数中,this调用的是其他构造函数,而其他构造函数中也有super存在,这样就存在两个super,意味着父类的两次初始化,这不安全。

转载地址:http://wtqcuy.baihongyu.com/

你可能感兴趣的文章
Vue中的render函数随笔
查看>>
Spring MVC
查看>>
修改Maven仓库路径
查看>>
Maven Install报错:Perhaps you are running on a JRE rather than a JDK?
查看>>
idea之前的版本
查看>>
移动端头部、中间、底部导航栏布局
查看>>
验证登录的前世今生:session、cookie
查看>>
react学习笔记
查看>>
airbnb编程规范
查看>>
vscode笔记
查看>>
(转)玩转Koa -- koa-bodyparser原理解析
查看>>
vue项目中引入特殊字体
查看>>
typeScript学习笔记
查看>>
设计模式之模板方法
查看>>
spring系列之事物
查看>>
小s探秘之HTTP和HTTPS
查看>>
转载extern用法详解
查看>>
代码之丑(转载)
查看>>
搭建Linux svn 服务器
查看>>
数据库设计的三大范式(转载)
查看>>