5.21天打卡第五次,面向对象进阶

8.继承

8.1.什么是继承? 继承的好处是啥?

继承就是Java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系。

提高代码复用性,减少代码冗余,增强类的功能扩展性。

2.继承的格式

子类 extends父类

3.继承后子类的特点?

子类 继承父类,子类可以得到父类的属性和行为,子类可以使用。
Java中子类更强大

​ 继承就把父类的方法和属性继承过来,在子类中可以对父类的方法进行重写或重载

8.2继承的设计规范、内存运行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsB6rzzE-1660204094802)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220811145607199.png)]

总结:

继承需要满足什么样的设计规范?

  • 子类们相同特征(共性属性,共性方法)放在父类中定义。
  • 子类独有的的属性和行为应该定义在子类自己里面。
8.3继承的特点
  • 子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
  • Java是单继承模式:一个类只能继承一个直接父类。
  • Java不支持多继承、但是支持多层继承。
  • Java中所有的类都是Object类的子类。

子类是否可以继承父类的静态成员》

子类可以直接使用父类的静态成员,这样的方法是共享,而不属于继承(个人认为)

8.4继承后:成员变量、成员方法的访问特点
在子类方法中访问成员(成员变量、成员方法)满足:就近原则
  • 先子类局部范围找
  • 然后子类成员范围找
  • 然后父类成员范围找,如果父类范围还没有找到则报错。

如果子父类中,出现了重名的成员,会优先使用子类的,此时如果一定要在子类中使用父类的怎么办?
可以通过super关键字,指定访问父类的成员。

格式:super.父类成员变量/方法

8.5继承后:方法重写
什么是方法重写?

在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

方法重写的应用场景

当子类需要父类的功能,但父类的该功能不完全满足自己的需求时。
子类可以重写父类中的方法。

案例演示:
旧手机的功能只能是基本的打电话,发信息
新手机的功能需要能够:基本的打电话下支持视频通话。基本的发信息下支持发送语音和图片。

@Override重写注解
  • @Override是放在重写后的方法上,作为重写是否正确的校验注解。
  • 加上该注解后如果重写错误,编译阶段会出现错误提示。
  • 建议重写方法都加@Override注解,代码安全,优雅!
方法重写注意事项和要求:
  • 重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
  • 私有方法不能被重写。
  • 子类重写父类方法时,访问权限必须大于或者等于父类 (暂时了解 :缺省 < protected < public)
  • 子类不能重写父类的静态方法,如果重写会报错的。
总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2be74xZ-1660204094803)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220811151227449.png)]

8.6继承后:子类构造器的特点
子类继承父类后构造器的特点:

子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。

原因:

在进行初始化时候,需要先访问父类的数据,先对父类的数据进行初始化,也就是先访问父类的构造器

如何调用父类构造器?

super();可写可不写,不写默认存在

8.7继承后:子类构造器访问父类有参构造器
super调用父类有参数构造器的作用:

​ 初始化继承自父类的数据。

如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?

会报错。因为子类默认是调用父类无参构造器的。

如何解决?

子类构造器中可以通过书写 super(…),手动调用父类的有参数构造器

8.8this、super使用总结
this:代表本类对象的引用;super:代表父类存储空间的标识。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdPLBseG-1660204094804)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220811151827338.png)]

this(…)和super(…)使用注意点:

子类通过 this (…)去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器的。
注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。

9.权限修饰符

什么是权限修饰符?
  • 权限修饰符:是用来控制一个成员能够被访问的范围。
  • 可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能够被访问的范围将受到限制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tM2VWKDd-1660204094805)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220811152309918.png)]

学完权限修饰符需要具备如下能力

​ 能够识别别人定义的成员的访问范围。

自己定义成员(方法,成员变量,构造器等)一般需要满足如下要求:

  • 成员变量一般私有。
  • 方法一般公开。
  • 如果该成员只希望本类访问,使用private修饰。
  • 如果该成员只希望本类,同一个包下的其他类和子类访问,使用protected修饰。

10.final

final的作用
  1. final 关键字是最终的意思,可以修饰(类、方法、变量)
  2. 修饰类:表明该类是最终类,不能被继承。
  3. 修饰方法:表明该方法是最终方法,不能被重写
  4. 修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。
final修饰变量的注意
  1. final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
  2. final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的

11.常量

常量概述和基本作用

常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
常量名的命名规范:英文单词全部大写,多个单词下划线连接起来。

public class Constant {  
	public static final String SCHOOL_NAME  = “传智教育";   
	public static final String LOGIN_NAME  = “admin";
	 public static final String PASS_WORD  =123456";
} 

常量做信息配置的原理、优势:

在编译阶段会进行“宏替换”:把使用常量的地方全部替换成真实的字面量。
维护系统容易,可读性更好。

常量做信息标志和分类

12.枚举(Enum)

12.1、枚举的概述

枚举是Java中的一种特殊类型
枚举的作用:“是为了做信息的标志和信息的分类”。

定义枚举类的格式:

 修饰符 enum 枚举名称{
            第一行都是罗列枚举类实例的名称。
}
enum Season{
SPRING , SUMMER , AUTUMN , WINTER;
}

枚举的特征:

  • 枚举类都是继承了枚举类型:java.lang.Enum
  • 枚举都是最终类,不可以被继承。
  • 构造器都是私有的,枚举对外不能创建对象。
  • 枚举类的第一行默认都是罗列枚举对象的名称的。
  • 枚举类相当于是多例模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沁颖呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值