final(不可变):
被 final 修饰的变量不可以被改变,又被称为常量。
被 final 修饰的方法不可以被重写。
被 final 修饰的类不可以被继承。
抽象(现实中不存在的东西):
在Java中:只声明,不实现。
抽象方法:使用abstract来修饰,不可以有方法体,直接用 分号 ;结束
抽象类:如果一个类中有抽象方法,这个类必须是一个抽象类。
特点:
抽象类不可以创建对象
抽象类的子类,必须重写父类中的抽象方法。否则,子类必须也是抽象类。
通过抽象类可以强制的要求子类中必须有那些方法。
抽象类中可以有正常的方法。
抽象类的特点:
抽象类无法被其他类实例化,但可以拥有构造方法
抽象方法的特点:
抽象方法无方法体,必须定义在抽象类中
抽象方法必须在子类中实现,除非子类也是抽象类
接口
接口中的属性都是全局静态变量,自JDK1.8起,在接口中可以定义的方法包括抽象方法,静态方法和默认方法
类只能继承一个父类,但可以实现多个接口。java通过实现接口可以达到多重继承的效果
接口表示一种约定,也表示一种能力。接口体现了约定和实现相分离的原则。通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性
类与类的关系
继承关系,只支持单继承
比如,A是子类 B是父类,A具备B所有的功能(除了父类的私有资源和构造方法)
子类如果要修改原有功能,需要重写(方法签名与父类一致 + 权限修饰符>=父类修饰符)
类和接口的关系
实现关系.可以单实现,也可以多实现
class A implements B,C{}
其中A是实现类,B和C是接口,A拥有BC接口的所有功能,只是需要进行方法的重写,否则A就是抽象类
接口与接口的关系
是继承关系,可以单继承,也可以多继承
interface A extends B,C{}
其中ABC都是接口,A是子接口,具有BC接口的所有功能(抽象方法)
class X implements A{}
X实现类需要重写ABC接口的所有方法,否则就是抽象类
class A extends B implements C,D{}
其中A是实现类,也是B的子类,同时拥有CD接口的所有功能
这时A需要重写CD接口里的所有抽象方法
接口与抽象类的区别
接口是一种用interface定义的类型
抽象类是一种用class定义的类型
接口中的方法都是抽象方法,还有默认方法与静态方法
抽象类中的方法不做限制
接口中的都是静态常量
抽象类中可以写普通的成员变量
接口没有构造方法,不可实例化
抽象类有构造方法,但是也不可以实例化
接口是先天设计的结果,抽象是后天重构的结果
接口可以多继承
抽象类只能单继承