接口:简单理解可以认为是一份合同,契约
出现的目的:体现封装性
分离契约和实现
区分开甲方(提要求)和乙方(干活)
接口的语法:
interface 接口名称{
void volumnUp(); 抽象方法
}
要点:1.接口的定义允许多继承
2.接口无法去实例化对象
3.接口中给出的方法列表默认
1)public 访问限定修饰符
2)无法使用static修饰(有特例)
3)是一个抽象方法,直接用分号结尾,不用给出方法体
接口定义的时候可以多继承,实现的时候可以多实现
接口中不能出现属性,可以出现默认都是被final static修饰
final关键字:
修饰三个位置:
1)修饰变量,不可变变量,只有一次赋值的机会
final int a=10;
a=100; //触发编译错误
final int[] a=new int[10];
A) a=new int[100]; //final只保证a的指向不能改变
B) a[0]=100; //a[0]的值可以改变
final Person p=new Person();
A) p=null; //触发编译错误
B) p.name=“Hello”;
2) final可以修饰类,表示这个类不能被继承,其内部的方法都不能被覆写
final class A{ }
3)被final修饰的类内部所有的方法都会自动被final修饰
final可修饰方法,代表这个方法无法被其子类覆写
class A {
final void method() {}
}
abstract关键字
1> 修饰类,表示这个类无法被实例化
abstract class A{} 抽象类
new A(); //编译错误
2> 修饰方法,该方法称为抽象方法,只有方法签名,没有方法实现
abstract void method();
在interface中的方法默认前面都带一个abstract,都是抽象方法。
注意:如果一个类中有抽象方法,则这个类就不能被实例化,故这个类也是一个抽象类。
如果一个类是抽象类,可以没有抽象方法。
对比final: final类中的都是final方法(无法被覆写)
有final方法的不一定是final类
抽象方法一旦被实现了一次,就不再是抽象方法。
多态(继承和多态都取自于生物学的术语):
1.父类型的引用可以指向子类型的对象(向上转型)
2.编译期间可以调用的方法列表,以引用类型为准
3.运行期间,真正执行的普通方法,以实际执行的对象类型为准
4.运行期间,真正执行的静态方法以引用类型为准