知识盲点汇总

知识盲点汇总

1. 多态

  • 多态中,编译看左边,运行看右边

  • 多态的前提是继承

  • 要有方法的重写

  • 父类引用指向子类对象,如:Animal a = new Dog(); -- 小到大,向上转型

什么可以被重写?

  1. 普通成员方法 (由于存在重写, 所以调用了父类的方法声明, 使用了子类的方法体)

  2. 成员变量 (由于不存在重写, 所以直接使用父类的)

  3. 静态方法 (静态资源随着类地加载而加载, 重写的静态方法和父类的静态方法不是同一个类, 所以不是重写)

多态的好处

  1. 可以把不同的子类对象当做父类来看, 可以屏蔽不同子类对象之间的差异, 写出可以通用的代码, 做出通用的编程.
  2. 统一调用的标准, 一切向父类看齐
  3. 提高了程序的扩展性和可维护性

2.抽象类

抽象类可实现多态. 关键字: abstract

  • 使用abstract关键字的方法为抽象方法

    注意: 如果这个类有抽象方法, 那么这个类也必须是抽象类, 用abstract修饰. 抽象类里面可以有普通方法

  • 子类如果继承了抽象的父类, 子类两条路: 把所有抽象方法都重写 或者 是一个抽象子类

  • 抽象类本身不能创建对象, 但是为什么提供构造方法? 是为了子类创建对象时调用.

  • 抽象类中可以拥有成员变量常量

3.final关键字

  1. 父类被final修饰后, 变成了最终的类, 不能被继承.
  2. 当变量被final修饰后, 就成了常量, 值不能被修改.
  3. 当方法被final修饰后, 就成了最终方法, 不能被重写.

4.接口

接口是一种特殊的抽象类, 也可以实现多态. 关键字: interface

  1. 接口没有构造方法

  2. 实现接口之后必须重写所有的抽象方法, 或者这个类必须是抽象类.

  3. 接口没有成员变量, 但是可以有常量(接口里的变量值不能修改)

    即使你在接口里这么写: String name = "张三" 这么写, 它也默认是finalstatic修饰的 (可以截至使用类名点进行调用)

  4. 接口里不可以有普通方法

  5. 接口中的抽象方法可以省略publicabstract关键字

    例如:

    interface Inter {
        // 以下这两种写法是一样的, 接口中可以省略public和abstract
        // public abstract void show();
        // void show();
    }
    
  6. 接口中的方法重写时, 要有足够的权限, 如果接口里都是public , 重写的时候权限必须要比public要大, 或者为 public才可以

  7. JDK1.8之后(包括JDK1.8) 接口扩展 (不常用)

    • default 修饰的方法可以有方法体, 并且接口的实现类可以进行重写, 重写之后调用实现类的方法体, 否则调用接口中的方法体.
    • static修饰的方法根普通的静态类一样, 实现类不可以重写, 可以直接使用接口名点进行调用

5.接口复杂用法

  1. 接口和接口之间是继承关系才可以关联

    示例:

    // 创建接口1
    interface Mapper1 {
    	void save();
    	void get();
    }
    // 创建接口2
    interface Mapper2 {
    	void add();
    	void update();
    }
    // 接口和接口之间是继承关系 (Mapper3 继承了 Mapper1 和 Mapper2中的方法)
    interface Mapper3 extends Mapper1, Mapper2{
    	
    }
    

    上例中: 如果一个实现类实现了Mapper3接口, 那么需要重写Mapper1, Mapper2, Mapper3中的所有抽象方法

  2. 实现类和接口使用implements

    一个类可以实现多个接口, 例如:

    class Impl2 implements Mapper1, Mapper2 {
        // 重写 Mapper1 和 Mapper2 这两个接口的抽象方法都重写
    }
    
  3. 实现类也可以继承一个类的同时实现多个接口. 必须是先继承父类再实现接口, 有先后顺序

原文地址:https://www.cnblogs.com/zpKang/p/12887722.html