1.super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。
super关键字的使用
![7b920c5ff27bb2ebbdb59b351080042c.png](https://i-blog.csdnimg.cn/blog_migrate/6bb0c92e408e89d0195672590c08c1ee.jpeg)
执行结果
![45eed1f59df4865d638b9e727c057b42.png](https://i-blog.csdnimg.cn/blog_migrate/74130908e9719d601c4bd1c611e254aa.jpeg)
1.1 继承树追溯
·属性/方法查找顺序:(比如:查找变量h)
1. 查找当前类中有没有属性h
2. 依次上溯每个父类,查看每个父类中是否有h,直到Object
3. 如果没找到,则出现编译错误。
4. 上面步骤,只要找到h变量,则这个过程终止。
·构造方法调用顺序:
构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。
![551cd53afb3ad146dfcd2e5c20fafccb.png](https://i-blog.csdnimg.cn/blog_migrate/0a543f88ac91199a981b31ac9c94ab92.jpeg)
执行结果
![ea1b04e98d8300f6e6ab821f6cc4e8f6.png](https://i-blog.csdnimg.cn/blog_migrate/a506d615a1753fa9b0515cac427d9af1.jpeg)
2.面向对象三大特征_封装的使用_访问控制符
封装的作用和含义
需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来,这就是封装。说的专业一点,封装就是把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
我们程序设计要追求“高内聚,低耦合”。 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
编程中封装的具体优点:
1. 提高代码的安全性。
2. 提高代码的复用性。
3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。
4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。
没有封装的代码会出现一些问题
![f1db6cf3f64d1ec18af75705163e5284.png](https://i-blog.csdnimg.cn/blog_migrate/31b38e264a4962c41d8db90905166bc8.jpeg)
执行结果
![6184372854a153ca27c65b15cba1bf44.png](https://i-blog.csdnimg.cn/blog_migrate/45af288558e5f9c6f9cf6f18137c8822.jpeg)
封装的实现—使用访问控制符
Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
其访问权限范围:
![a5fe858bfc30ac7ef5e039ad393c40dd.png](https://i-blog.csdnimg.cn/blog_migrate/8591a3def301db676a0d3df26860b948.jpeg)
1. private 表示私有,只有自己类能访问
2. default表示没有修饰符修饰,只有同一个包的类能访问
3. protected表示可以被同一个包的类以及其他包中的子类访问
4. public表示可以被该项目的所有包中的所有类访问
![b5a430cfbf465c8d0bf0e386e50c7253.png](https://i-blog.csdnimg.cn/blog_migrate/263135f65de874bbef7586b1c4c01248.jpeg)
修饰符权限从小到大排序:private--->default--->protected--->public
private(私有的):只能在本类中访问
default默认(友好的):本类中可以访问,同包下的其他类也可以访问。“只认邻居(同包下的其他类)不认远方亲戚(异包下的子类)”
protected(受保护的):本类中可以访问,同包下的其他类也可以访问,异包下的子类也可以访问。
public(公开的):所有类中都可以访问。
封装的使用细节
类的属性的处理:
1. 一般使用private访问权限。
2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。
JavaBean的封装实例
![689445f6bcdddc8db9f319d0318e1a08.png](https://i-blog.csdnimg.cn/blog_migrate/2c91240e93d04f15a8a001e0519d4f4b.jpeg)
![f650450df5ede09a532bfc8391125059.png](https://i-blog.csdnimg.cn/blog_migrate/ad6692a6debc77c3c420655afb8d05d6.jpeg)
运行结果:
![bfd17d9beae85ad814a64949a135d1d9.png](https://i-blog.csdnimg.cn/blog_migrate/636655884c6ef4b471da162df5a4cb03.jpeg)
getter和setter的快捷用法
![caba6a4c897a634fc915a6660ffde926.png](https://i-blog.csdnimg.cn/blog_migrate/f63153877e00c6092dd60564f7199a8d.jpeg)
![20e909438f11a171b4ac47ca763dbcb2.png](https://i-blog.csdnimg.cn/blog_migrate/0489dc680b8a163fe687853bbbe93e44.jpeg)
这样可以节省很多敲代码的时间。
4.面向对象三大特征_多态_多态的三个必要条件
多态(polymorphism)
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。
违背“开闭原则”。好程序要具有“可插拔性”。
对扩展“开”,对修改要“闭”。
多态优点:提高程序的扩展性和可维护性。
多态的要点:
1. 多态是方法的多态,不是属性的多态(多态与属性无关)。
2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
多态和类型转换测试
![7027bc05e6c2421c7225184eb42b9295.png](https://i-blog.csdnimg.cn/blog_migrate/4b41066609981424159b3b4b7a1b27c9.jpeg)
![c35a7aea5cb7baf24fff19435867d619.png](https://i-blog.csdnimg.cn/blog_migrate/f3ebaf2c528648ded5c8c96a673d3414.jpeg)
![346923dce7689a4c57bfe07825706b2c.png](https://i-blog.csdnimg.cn/blog_migrate/290339e4e235af751e8f65bbe23bc4ad.jpeg)
![673ca8a8363b39ddee13df1a970df73b.png](https://i-blog.csdnimg.cn/blog_migrate/8ab5b52d5a568f09ef9b9823437ad302.jpeg)
![983eaff2458d749289cc9481fda9d288.png](https://i-blog.csdnimg.cn/blog_migrate/2a2d6ec05ee9a7c34f980074673e48e1.jpeg)
![ea4d6216dd8b22cd55aef7776d83e673.png](https://i-blog.csdnimg.cn/blog_migrate/5605438916c2cda60389ce9d33d89527.jpeg)
对象的转型(casting)
父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。
向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!
实例
![74d3d8ab5228e30669cc8a9f2716b419.png](https://i-blog.csdnimg.cn/blog_migrate/58066989324a9f5ec5fc0c9813af544b.jpeg)
运行结果:
![74c218eb54a2b7d3d95cb8434c4d95ae.png](https://i-blog.csdnimg.cn/blog_migrate/6d73d89d4bad6bdcddd91eafd8c31427.jpeg)
注意:
向下转型如果类型不匹配将出现类型转换异常: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](https://i-blog.csdnimg.cn/blog_migrate/9b5b98372afa6223ae5d51b9283f0b1f.jpeg)