java中的继承

1. 类的含义

:用于描述某一类事物
但是多个事物之间存在上下级关系,我们就可以称为继承。

2.子类继承父类

那么子类就可以拥有父类中所有的共用的(public)属性及方法.

3.使用场景

当多个类中描述的属性及行为是相同的,或者大部分是相同的,此时就可以考虑使用继承来简化代码

4.关键字

extends 继承 ,书写格式:public class 类名 +extends+父类名

问题1:

继承可以简化代码,提高代码的利用率,那是不是只有 有相同的东西就进行继承呢?

答:继承虽然可以简化代码,但是通常用于同一类事物,且有多个共同的属性或功能时才考虑继承

例如:定义两个类名为Dog 和Tiger,那么他们两个类中会有很多属性是重合的,比如 color,type,age,sex,name这些属性是两个类中都会有的共用属性,那么我们就可以创建一个父类(Animal),让父类中包含这些公共属性来达到简写代码的实现。

父类(收集子类中的公共属性):在这里插入图片描述子类1:
在这里插入图片描述子类2:在这里插入图片描述主函数:在这里插入图片描述最后输出结果为
在这里插入图片描述

问题2:

非静态的属性和方法只有在创建对象的时候才会被加载进内存中,然后才可以通过对象进行调用,
此处并没有创建父类的对象,为什么还能调用其中的方法?
答:非静态的属性和方法想要被加载,那么一定要有对象的存在。子类在开辟空间后会在自己的空间中让出一部分用于父类的使用。 所以开辟空间的顺序为先子类再父类,但是初始化的顺序为先父类再子类。

问题3:

所有类对应的空间的开辟都需要通过构造器,那么父类的构造器在哪儿执行了,怎么执行的?
答:每一个类中都有一个默认的默认的无参构造器(类本身没有定义构造器)

5.super(父类)

this是当前类的对象,在当前类里面,默认所有的静态和非静态属性及方法都持有一个this对象, 当继承关系存在的时候,如果在子类当中去调用父类当中的非静态属性及方法,构造方法会默认带有super()关键词 ,父类当中相互调用还是使用this()关键字

继承的加载流程:

注意事项:1.静态随着类的加载而加载,非静态随着对象的创建而加载
2.在初始化中,是先运行父类的初始化及加载过程,再运行子类的初始化及加载过程
3.先给子类开辟开间,然后在子类的空间中又给父类开辟空间,初始化的时候先给父类中的属性初始化,然后才是子类中的属性初始化

super练习题:

在这里插入图片描述在这里插入图片描述因为静态代码构造块是随着类的加载而加载,所以是先加载父类的静态,在加载子类的静态,加载完之后运行A a=new A,到第29行public A(),因为默认的有super();关键字,所以要先运行父类,在父类当中代码块是先运行代码块,在运行构造器,等父类运行完之后在运行子类的代码块和构造器,都执行完比以后,再按顺序执行对象中的引用对象。
所以最后的流程顺序为:6-4-7-8-3-2-1-5-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值