final关键字
final关键字修饰的变量 称为常量,自定义常量提高了程序的可读性
final特点
- final可以修饰类、成员变量、成员方法以及局部变量
- final修饰类不能够被子类继承
- final修饰的变量表示常量
常量不能够被二次赋值
final修饰成员变量:必须在声明的同时赋值;
final修饰局部变量:可以先声明再赋值 - final修饰的成员方法不能被子类继承
多态(polymorphism)
多态概述:同一个引用类型,使用不同的实例而执行不同操作,即父类引用指向子类对象。
使用多态的3个前提条件:
- 一定要有继承关系
- 存在方法重写
- 父类引用指向子类对象
使用多态访问成员的特点
成员变量:编译看左,运行看左;
成员方法:编译看左,运行看右;
静态成员:不存在重写,不构成多态,直接使用类名.
调用
构造方法:限制性父类的构造方法,可以帮我们初始化父类继承过来的成员,再执行子类
花木兰替父从军
花木兰替父亲花弧从军打仗,花弧有自己的姓名等信息(成员变量),有自己的打仗方法(成员方法),花木兰虽然有自己的信息,但同时也从父亲那里继承了他的信息,并且木兰有属于自己的打仗方法。木兰在战场上使用的是自己父亲花弧的信息,也就是外界知道他叫花弧。当打仗时候外界调用花弧的打仗方法,实际上是使用了木兰自己的打仗方法。除此以外,木兰作为女性还有自己的梳妆打扮这样的特有的方法,在战场上不能使用,打仗之后该怎么使用?这样就涉及到转型。
抽象类
某些继承的时候父类被继承的方法毫无存在意义,但是因为要实现重写就必须存在,因此可以引入抽象方法的概念
抽象方法,使用abstract修饰,无方法体(大括号也不需要),结尾需要使用;
表示结束
有抽象方法的类必须定义为抽象类
抽象类的特点
- 抽象方法和抽象类使用
abstract
修饰 - 有一个抽象方法的类必须是抽象类
- 抽象类中不一定要有抽象方法
- 抽象类不能被创建对象,因此没有抽象方法的抽象类可以用作放置外界创建对象
防止外界创建对象的方法有:
私有构造方法
抽象类
接口
内部类 - 抽象类不能被实例化–利用子类
- 抽象类子类的特点:
如果子类想要继承抽象类,就必须实现抽象类中所有的抽象方法
如果子类不想实现父类的抽象方法,那么子类必须升级为抽象类 - 抽象类和普通类的区别
抽象类中可以有成员变量,成员方法,构造方法,静态方法,常量? 有的话又有什么意义呢?
成员变量 --> 给子类使用
成员方法 --> 给子类使用
构造方法 --> 帮助子类初始化父类继承下来的成员
静态方法 --> 直接通过类名访问,防止以创建对象这种不建议的方式访问
常量 --> 方便访问
抽象类和普通类没有区别,只不过是抽象类多了抽象方法而已
抽象类的抽象方法强制子类重写
非抽象方法直接给子类使用
构造方法和成员变量直接给子类使用
抽象类是一个彻头彻尾的服务类,服务于所有的子类
- 抽象类的成员一般使用 public 或者 protected
- private final static native 均不可以用来修饰抽象方法
- private修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
- final修饰的方法不能够被子类继承,更不可能被重写,abstract修饰的方法强制子类重写,二者冲突
- static修饰的方法一般方便调用,一般都是用来实现功能的,抽象方法没有方法体,二者没有意义
- native修饰的方法不是Java实现的,有方法体,抽象方法没有方法体,二者没有意义