1、
1、方法重写和重载的区别
重载overload/ 重写override |
位置 | 方法名 | 返回值 | 参数列表 | 访问修饰符 |
重载 overload | 在同类中 | 相同 | 可以不同(不影响) | 必须不同(作为是否重载的唯一标准) | 可以不同(不影响) |
重写 override | 子类重写父类的方法 | 相同 | 必须相同(仅仅方法体可以不同) | 必须相同 | 子类的修饰符权限不得低于父类的权限 |
总结:方法重写时,是在子类中插入一个与父类 《方法名、返回值、参数列表均相同》、《子类的该方法的访问修饰符的权限不比父类低的》方法,并且建议在子类重写方法的前面一行加入 "@override" 作为修饰检查。
-----手动分割线
2、抽象类
1、特点
- 成员变量可以包含变量、常量
- 成员方法可以包含构造方法、普通方法、抽象方法,有抽象方法的类必须定义为 abstract (抽象)类
- 抽象方法的构造方法是用于初始化成员变量的(包括父类和该类本身的成员变量)
- 继承自抽象类的子类,必须重写抽象父类的抽象方法,否则必须也定义为抽象类
- 可以有静态方法和静态代码块
2、抽象类与普通类的区别
- 可以与普通类一样,含有构造方法等,但是抽象方法必须有 abstract 修饰
- 抽象类不能实例化对象
- 如果有子类继承了一个抽象类,那么这个子类必须重写这个抽象类的抽象方法,否则这个子类必须定义为抽象类
- 抽象类的方法的权限修饰符需要根据子类和子类所在包的位置(路径),抽象方法一般定义为public或者protected,因为如果是private,那么子类不能重写该抽象方法了
3、抽象类与接口的区别
接口 interface 的概念
- 接口没有 构造方法
- 接口中的方法默认都是 public abstract 抽象方法,JDK8之后可以使用default,除去default,其他修饰符都会报错
- 其中的变量默认都是 public static final(此时已经不能称为成员变量),若定义为private或其它权限修饰符(除了默认),会编译报错
- 接口与类是实现关系,子类实现接口,子类可以实现多个接口
- 接口支持多继承
- 接口中可以包含静态方法
抽象类和接口的区别
- 抽象类可以有构造方法,接口没有
- 抽象类的成员方法可以是任意类型,接口只有public abstract(JDK8之后有default和静态)
- 抽象类的成员变量可以是任意类型,接口只能是public static finally
- 一个类只能继承一个抽象类,但是一个类可以实现多个接口,并且接口可以多继承
-----手动分割线
3、finally 关键字
1、作用
- 该类不想被继承的时候,添加 finally 修饰
- 该类的方法不想被重写的时候,添加 finally 修饰
- 用于修饰常量,finally int num = 3; //修改num = 5; 会报错
- 可以用于修饰引用类型对象常量,包括自定义类对象(修饰的是地址,类似C++的指针常量,类对象的成员变量可以更改)
-----手动分割线
4、static 成员方法和属性的继承
- 子类可以继承父类的静态属性和静态方法,父类的静态方法不为 private 或其它的对子类的不可见的情况时
- 但是不能通过重写父类的静态方法来实现多态
- static 方法只能访问 static 成员,普通成员方法可以调用 static 成员和方法
-----手动分割线
后记
1、继承的对象:
1、类与类的继承
2、方法与方法的继承
3、都是通过 extends 关键字