ztree树封装 json实例_009 Java 继承、封装及多态

1.super关键字

super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。

若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。

super关键字的使用

7b920c5ff27bb2ebbdb59b351080042c.png

执行结果

45eed1f59df4865d638b9e727c057b42.png

1.1 继承树追溯

·属性/方法查找顺序:(比如:查找变量h)

1. 查找当前类中有没有属性h

2. 依次上溯每个父类,查看每个父类中是否有h,直到Object

3. 如果没找到,则出现编译错误。

4. 上面步骤,只要找到h变量,则这个过程终止。

·构造方法调用顺序:

构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

551cd53afb3ad146dfcd2e5c20fafccb.png

执行结果

ea1b04e98d8300f6e6ab821f6cc4e8f6.png

2.面向对象三大特征_封装的使用_访问控制符

封装的作用和含义

需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来,这就是封装。说的专业一点,封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

我们程序设计要追求“高内聚,低耦合”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。

编程中封装的具体优点:

1. 提高代码的安全性。

2. 提高代码的复用性。

3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。

4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。

没有封装的代码会出现一些问题

f1db6cf3f64d1ec18af75705163e5284.png

执行结果

6184372854a153ca27c65b15cba1bf44.png

封装的实现—使用访问控制符

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。

其访问权限范围:

a5fe858bfc30ac7ef5e039ad393c40dd.png

1. private 表示私有,只有自己类能访问

2. default表示没有修饰符修饰,只有同一个包的类能访问

3. protected表示可以被同一个包的类以及其他包中的子类访问

4. public表示可以被该项目的所有包中的所有类访问

b5a430cfbf465c8d0bf0e386e50c7253.png

修饰符权限从小到大排序:private--->default--->protected--->public

private(私有的):只能在本类中访问

default默认(友好的):本类中可以访问,同包下的其他类也可以访问。“只认邻居(同包下的其他类)不认远方亲戚(异包下的子类)”

protected(受保护的):本类中可以访问,同包下的其他类也可以访问,异包下的子类也可以访问。

public(公开的):所有类中都可以访问。

封装的使用细节

类的属性的处理:

1. 一般使用private访问权限。

2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。

3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

JavaBean的封装实例

689445f6bcdddc8db9f319d0318e1a08.png

f650450df5ede09a532bfc8391125059.png

运行结果:

bfd17d9beae85ad814a64949a135d1d9.png

getter和setter的快捷用法

caba6a4c897a634fc915a6660ffde926.png

20e909438f11a171b4ac47ca763dbcb2.png

这样可以节省很多敲代码的时间。

4.面向对象三大特征_多态_多态的三个必要条件

多态(polymorphism)

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。

违背“开闭原则”。好程序要具有“可插拔性”。

对扩展“开”,对修改要“闭”。

多态优点:提高程序的扩展性和可维护性。

多态的要点:

1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。

3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

多态和类型转换测试

7027bc05e6c2421c7225184eb42b9295.png

c35a7aea5cb7baf24fff19435867d619.png

346923dce7689a4c57bfe07825706b2c.png

673ca8a8363b39ddee13df1a970df73b.png

983eaff2458d749289cc9481fda9d288.png

ea4d6216dd8b22cd55aef7776d83e673.png

对象的转型(casting)

父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。

向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!

实例

74d3d8ab5228e30669cc8a9f2716b419.png

运行结果:

74c218eb54a2b7d3d95cb8434c4d95ae.png

注意:

向下转型如果类型不匹配将出现类型转换异常:java.lang.ClassCastException:

使用instanceof操作符判断对象是否是指定类型的实例,可以防止向下转换异常。

5.final关键字

final关键字的作用:

1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。

final int MAX_SPEED = 120;

2. 修饰方法:该方法不可被子类重写。但是可以被重载。

final void study(){}

3. 修饰类: 修饰的类不能被继承。比如:Math、String等。

final class A {}

final修饰图

f6c6e81792b294102dbbc907c1928357.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值