final概述
-
什么是final?
-
Java中的关键字,不可变的
-
-
最近学的关键字?
-
break、return、continue、static、this、super、extends、final
-
-
final的修饰特点
-
修饰类,类不能被继承
-
修饰变量,变量成为了常量,只能被赋值一次
-
修饰方法,方法就不能重写
-
-
final关键字修饰局部变量
-
方法内部或者方法声明上
-
基本类型,是值不能被改变
-
引用类型,是地址值不能被改变,对象中的属性可以改变
-
-
-
final修饰变量的初始化时显示初始化
-
成员变量
-
-
-
在对象创建完成之前
-
局部变量
-
-
-
随着方法的调用
-
-
-
多态
-
什么多态?
-
多态指的是同一个事物在不同环境下表现出来的状态
-
-
多态的前提
-
必须有继承
-
子类必须有方法重写
-
父类引用指向子类对象
-
注意
-
-
-
-
Java中所有的类,如果没有写extends关键字,默认都是继承Object类
-
-
-
所有的最顶层那个类一定是Object
-
-
-
-
多态的特点
-
提高代码扩展性
-
-
应用场景,方法的声明部分
-
-
提高代码的维护性
-
-
多态的基础是继承
-
-
-
多态的弊端
-
无法使用子类中特有的功能(方法)
-
-
多态的成员访问(赋值、取值)特点
-
成员变量
-
-
编译看左边,运行看左边。
-
注意:
-
-
不能访问子类独有的
-
-
-
构造方法
-
-
-
-
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
-
和继承现象一样
-
-
成员方法:
-
-
编译看左边,运行看右边。
-
代码实验案例
-
-
静态方法
-
-
-
编译看左边,运行看左边。(静态和类相关,算不上重写,所以,访问还是左边的
-
-
-
-
总结:
-
-
除了成员方法之外,其余编译和运行都看父类引用
-
-
多态的内存结构
-
前期绑定和后期绑定:多态
-
绑定
-
变量和数值的关联
-
调用方法的关联(类和方法,对象和方法)
-
-
-
前期绑定
-
-
-
-
在Javac,数值就知道,自己属于哪一个变量
-
Javac的时候,方法就知道自己该被谁调用
-
-
-
后期绑定
-
-
-
只有在运行的时候,数值才知道自己数哪一个变量
-
只有在运行的时候,方法才知道自己被谁调用
-
-
-
-
前期绑定关键字
-
-
static/ final 修饰的内容,其他的都是后期绑定!
-
-
多态转型(数据类型转换)
-
向上转型
-
多态的本质其实是子类对象的向上转型,转至父类引用,因而在使用过程中无法使用子类特有功能
-
子类转换成父类类型
-
-
向下转型:
-
向下转型是指将已经向上转型的的对象再向下转型,即将指向父类引用改回指向子类引用
-
父类类型转换为子类类型
-
子类类型 变量名 = (子类类型)父类变量;Dog dog =(Dog)animal;
-
关键字instanceof
-
instanceof格式
-
对象 instanceof 类名
-
判断对象是否是类的一种 System.out.println(c instanceof A);
-
抽象类
-
什么是抽象类?
-
抽象类指的是在父类中使用abstract修饰类和其中的方法,使得子类必须对其抽象方法进行改写。
-
一些方法和内容不明确的时候
-
-
抽象类的格式:
-
抽象类和抽象方法必须用abstract的关键字修饰
-
抽象类的格式:abstract class 类名{}
-
抽象方法格式:public abstract void eat();
-
-
抽象的成员特点
-
成员变量:
-
-
-
既可以是变量,也可以是常量。
-
-
构造方法:
-
-
用于子类访问父类数据的初始化。
-
-
成员方法:
-
-
既可以是抽象的,也可以是非抽象的。
-
-
-
-
抽象类的注意事项
-
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
-
抽象类中可以有构造方法,抽象类不能进行实例化
-
-
抽象类的构造方法的作用,用于子类访问父类数据时的初始化(赋值操作)
-
抽象类不能直接实例化那么,抽象类如何实例化呢?
-
-
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
-
-
-
抽象类的子类
-
-
要么是抽象类
-
要么重写抽象类中的所有抽象方法
-
-
-
抽象类的成员方法特性
-
抽象方法 强制要求子类做的事情。
-
-
非抽象方法 子类继承的事情,提高代码复用性
-
-
接口
-
什么是接口
-
与类同级别,接口主要用来定义一些扩展额外的功能(接口不能实例化)
-
-
接口使用的具体原则
-
接口用关键字interface表示 格式: interface接口名 {}
-
类实现接口用implements表示 格式: class类名 implements接口名 {}
-
接口不能实例化,但是可以通过多态的方式实例。
-
接口的子类
-
-
可以是抽象类。但是意义不大。
-
可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
-
-
-
接口的成员特点
-
成员变量
-
只能是常量,并且是静态的。默认修饰符:public static final建议自己手动给出。
-
-
构造方法
-
接口没有构造方法,成员方法
-
-
只能是抽象方法
-
默认修饰符:public abstract,建议自己手动给出。
-
-
类与类,类与接口,接口与接口的关系
1.类与类:
-
继承关系,只能单继承,可以多层继承。
2.类与接口:
-
实现关系,可以单实现,也可以多实现。
-
并且还可以在继承一个类的同时实现多个接口
3.接口与接口:
-
继承关系,可以单继承,也可以多继承。
接口与抽象类的区别
1.成员区别
-
抽象类
-
-
成员变量:可以变量,也可以常量
-
构造方法:有
-
成员方法:可以抽象,也可以非抽象
-
-
接口
-
-
成员变量:只可以常量
-
成员方法:只可以抽象
-
2.设计区别
-
抽象类中定义的是子类共性的属性功能,子类再进行方法重写接口中定义的是类的扩展的额外功能