封装:(类内部不被外部干涉,暴露的少,类似于C++的private和public)
private:类
default/置空:类、包
protected:类、包、子类
public:类、包、子类、所有类
要点:
用get/set(public)方法来 读取/设定(private)属性
*boolean变量的get方法用is开头
多态:(只针对方法,不针对属性)
引用时以模糊的类型(一般为父类),运行时传入的参数具体化(具体的子类)
必要条件:继承、方法的重写、父类引用指向子类对象(实现了【父 a = new 子()】)
强制转型问题:在父 a = new 子()后,不能a.子类中的方法(编译时未找到方法),只能强制转型;运行时依旧以真实子类判断,b子类被强转c子类时编译不报错,运行报错
* a instanceof b:a(变量)引用b类(类名)变量
抽象类,抽象方法:
abstract,包含抽象方法的类一定是抽象类(都要加~)
非抽象的子类必须重写抽象父类的抽象方法
抽象类不可实例化,可以有普通属性和方法,但构造方法不能用new,只能被子类调用
抽象类只用于继承
接口(interface):如果你是xx,则必须能xx
抽象类的抽象,public interface 接口名 【public class 类名】,只含常量和抽象方法
接口也具有继承的性质,且支持多继承
常量属性自带了隐式的【public static final】
方法的属性只能是【public abstract】(公开的抽象的)
实现(implements),public class 类 implements 接口
接口不能被实例化
回调:CallBack,Hook
多态的应用,在某处有多种解决方法,则在该处留下hook,交由其他部分给出解决方法。
内部类:
只能让外部类直接访问,不允许同一个包的其他类直接访问;可以直接访问外部类的私有属性,反之不行
非静态内部类的成员不能为静态;静态内部类可以视为外部类的静态成员,从属于类,不一定需要外部类对象