Super关键字:
Super“可以看做”是直接父类对象的引用。可以通过Super来访问父类中被子类覆盖的方法或属性。使用Super调用普通方法,语句没有位置限制,可以在子类中随便调用。
在一个类中,若是构造方法的第一行代码没有显式的调用super(.....)或者this(....);那么Java默认都会调用super(),含义是调用父类无参数构造方法。这里的super()可以省略。
1.Object中的toString()方法默认返回的字符串是什么含义?
答:类名@地址
super关键字的含义是什么?
答:直接父类对象的引用
继承树追溯:
属性/方法查找顺序:(比如:查找变量h)
1. 查找当前类中有没有属性h
2. 依次上溯每个父类,查看每个父类中是否有h,直到Object
3. 如果没有找到,则出现编译错误
4. 上面步骤,只要找到h变量,则这个过程终止
构造方法调用顺序:
构造方法第一句总是:super(...)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
注:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。
封装(encapsulation):
封装是面向对象三大特征之一。对于程序合理的封装让外部调用更加方便,更加利于写作。同时,对于实现者来说也更加容易修正和改版代码。
程序设计要求:“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
编程中封装的具体优点:
1. 提高代码安全性
2. 提高代码的复用性
3. “高内聚”:封装细节,便于修改内部代码,提高可维护性
4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作
封装的实现:
Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。Java中4种“访问控制符”分别是private、default、protected、public,他们说明了面向对象的封装性,所以我们要利用他们尽可能的让访问权限降到最低,从而提高安全性。
private:表示私有,只有自己类能访问
default:表示没有修饰符修饰,只有同一个包的类能访问
protected:表示可以被同一个包的类以及其他包中的子类访问。
关于protected的两个细节:
1. 若父类和子类在同一个包中,子类可访问父类的protected成员,也可访问父类对象的protected成员。
2. 若子类和父类不在同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员。
封装的使用细节:
1. 属性一般使用private访问权限
2. 属性私有后,提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)
3. 方法:一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。