面向对象(oop):
    特点:封装、继承、多态

    封装:属性的私有化,行为的公开化 - 目的是为了将一段逻辑封装在一个方法或者是类中,便于其他对象的调用。

    继承:目的是为了子类去拓展父类的功能以及直接调用父类的非私有的内容,优点:节约代码。
    java中支持单继承!

    多态:一个对象多种形态。贯穿于整个面向对象的编程。
    实现多态(多态的体现):

    • 向上造型:父类的引用指向子类的对象。
      • 向上造型以后只能点出父类的方法,但是方法的最后执行结果是子类中重写父类的方法的结果。
    • 向下转型:其实就是强制类型转换 - 父类到子类/大类型到小类型不推荐

    编译期与运行期:
    编译期:绑定以及检查语法 - 在向上造型中看的是父类的引用。(等好左边)
    运行期:创建对象,调用运行方法中的内容 - 在向下造型中看的是子类的对象(等号右边)
    重载 - 编译期多态
    重写 - 运行期多态

    abstract(抽象)
    抽象类:

    • 不能实例化,但是有构造方法,抽象类本身就是给子类继承的。
    • 子类继承父类的时候必须实现父类的所有抽象方法,如果没有全部实现,那么这个子类还是一个抽象类。
    • 抽象类不能使用final修饰。没意义。

    抽象方法:

    • 没有方法体。
    • 必须在子类中被实现
    • 可以重载,不能使用static/final/private修饰。

    interface(接口):
    接口其实就是一个特殊的抽象类,它的抽象高度高于抽象类!没有构造方法。
    类与接口之间是实现关系,使用implements关键字。类在实现接口的时候需要重写接口中的所有的抽象方法,如果没有全部重写,那这个类就是抽象类。
    在jdk8.0之前,接口中只定义常量和抽象方法,之后可以定义默认的方法,使用default修饰的普通方 法,也可以定义静态方法。
    注意:
    1.接口与类之间是多实现,接口与接口之间是多继承(单根型的拓展)
    2.作用:作为模板或者是协议,约束使用功能。

    方法的重写和重载:
    重载:方法名相同,参数列表不同,返回值不影响。是程序中的编译期根据参数来绑定的。
    重写:方法名和参数列表相同,返回值相同(当子类与父类之间产生方法重写的时候,子类的返回值不能大于父类),权限修饰符不能使用private,也不可以使用final修饰。

    final:
    修饰方法 - 该方法不能被重写
    修饰类 - 不能被继承
    修饰属性 - 该属性不能被再次赋值

    • 基本类型的变量 - 只能赋值一次
    • 引用类型的变量 - 指向(地址值)只能赋值一次,但是对象的内容可改变

    static:
    表示静态资源,好处是优化main方法执行的,保存在内存中的方法区中。
    static修饰成员变量,全局共享一个(只有一份)。
    通常static用于加载静态资源的使用 - 静态代码块

    内部类:

    • 成员内部类
    • 局部内部类
    • 匿名内部类
    • 静态内部类

    处理静态内部类外,其他都不允许定义静态变量和静态方法。
    内部类和匿名内部类的作用:都是为了节约代码 - 通常内部类是为了外部类服务的,用完就不再用了。
    匿名内部类本质上是实现了对应的接口或者继承了对应的类,所以任何一个接口都可以产生匿名内部类,任何一个可以被继承的类都可以产生匿名内部类。

    权限修饰符:
    public - 所有的区域都可以访问(公开的)
    protected - 本类以及子类中可以访问(子类和父类可以不在同一个包下),同包类
    默认 - 本类以及同包类
    private - 只能在本类中被访问,子类中只能继承过去但是不能被访问

    构造函数:
    作用:初始化全员参数
    语法:方法名与类名完全一致(包括大小写),没有返回类型,但可以有return,权限修饰符没有限制,构造函数可以重载
    子类在继承父类的时候会自动调用父类的无参构造,然后再实例化自己,通常构造函数的第一行super(),所以我们在创建实例对象的时候必须同时定义无参和有参构造,因为直接定义有参构造会将无参构造覆盖。

    this和super:
    this - 表示本类 - 哪个对象调用正在被调用,那么this就是这个对象
    this. - 调用本类中的内容(属性或方法)
    this() - 调用本类中的构造方法(如果传参就调用对应有参的构造)
    super - 表示父类 - 一般使用这个关键字表示父类
    super. - 调用父类中的内容(属性或方法)
    super() - 调用父类中构造方法(如果传参就调用对应有参的构造)
    变量就近,方法就远原则。