抽象
Java表达抽象概念采用抽象类
Java表达抽象行为采用抽象类
含义:不同与日常中的抽象,java中的抽象是指抽出像的部分
抽象方法和抽象类
抽象方法
使用absract修饰的方法,没有方法体,只有声明
定义是一种规范,告诉子类必须要给抽象方法提供 具体实现
抽象类
包含抽象方法的类(ps:抽象类中可以没有抽象方法哦)
通过抽象类可以严格子类的设计,使子类直接更加通用
要点: 有抽象方法的类只能定义成抽象类
抽象类不能实例化,即不能用new来实例化对象
抽象类可以包含属性,方法,构造方法,但是构造方法只能用来被调用
抽象类只能用来被继承
抽象方法必须被子类实现
接口
一种公共的规范标准
全面的实现了规范和具体的分离
区别: 普通类:具体实现
抽象类:具体实现,规范(抽象方法)
接口:规范
定义
[访问修饰符] interface 接口名 [extends 父接口1,父接口2...] //承接口可以多继承
{
常量定义;接口内只能定义常量
【public static final】默认修饰 域类型 域名 = 常量值
方法定义;方法只能是抽象的
[public abstract ] 默认修饰 返回值 方法名
}
子类实现接口通过implements
接口不能创建实例(new对象),但是可用于声明引用变量类型
子类实现接口后要实现内的所有抽象方法
默认方法
(jdk1.8后接口可以添加具体方法)
默认方法用default关键字修饰,一个接口种可以有多个默认方法
子类实现接口时,可以直接调用接口中的默认方法,也可以重写
静态方法
接口中可以定义静态方法,静态方法通过接口名直接调用
实现类中可以重写,此时用类名调用
命名冲突问题
如果方法名称和形参列表相同,会发生命名冲突
如果父类和接口默认方法名冲突,则父类优先
如果多个接口中默认方法中有相同名字,则子类必须重新实现