1.抽象类
1.1定义
如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类
从语法上将抽象类使用abstract修饰。
语法:public abstract class Animal(){}
1.2和普通类的区别
1.抽象类不能被实例化,但是可以进行向上转型。
2.可以定义和普通类一样的成员变量和成员方法。
3.抽象类中可以定义抽象方法,抽象方法是指用abstract修饰的方法。(没有聚体实现的方法)
例如:
4.抽象方法不能是private的
5.抽象方法不能被final和static修饰,因为抽象方法要被子类重写,被final和static修饰后方法不可以重写了
6.抽象类必须被继承,并且继承后⼦类要重写⽗类中的抽象⽅法,否则⼦类也是抽象类,必须要使⽤ abstract 修饰
7.抽象类中不⼀定包含抽象⽅法,但是有抽象⽅法的类⼀定是抽象类
8.抽象类中可以有构造⽅法,供⼦类创建对象时,初始化⽗类的成员变量
作用:好处是多了一层编译器的校验(预防出错)
一个类A如果是抽象类,可以不重写父类B(抽象类)的抽象方法,但是如果一个普通类继承A类
那么这个普通类必须将B,A类中所有的抽象方法重写 父债子还,层层相连
2.接口
2.1概念
接⼝就是公共的⾏为规范标准,⼤家在实现时,只要符合规范标准,就可以
通⽤。
在Java中,接⼝可以看成是:多个类的公共规范,是⼀种引⽤数据类型。
2.2语法规则
public interface 接口名称{}
提⽰:
1. 创建接⼝时,接⼝的命名⼀般以I开头.
2. 接⼝的命名⼀般使⽤"形容词"词性的单词.
3. 阿⾥编码规范中约定,接口中的方法和属性不要加任何修饰符号,保持代码的简洁性.即void methond();
2.3接口使用
接口不能直接使用,必须要有一个“实现类”来“实现”该接口,实现接口中的所有抽象方法。
格式:public class 类名称 implements 接口名称{}
注意:⼦类和⽗类之间是extends继承关系,类与接口之间是implements实现关系。
2.4接口特性
1. 接⼝类型是⼀种引⽤类型,但是不能直接new接⼝的对象
2. 接⼝中每⼀个方法都是public的抽象⽅法,即接⼝中的方法会被隐式的指定为public abstract(只
能是publicabstract,其他修饰符都会报错)
3. 接⼝中的方法是不能在接⼝中实现的,只能由实现接⼝的类来实现
4. 重写接⼝中⽅法时,不能使⽤默认的访问权限
5. 接⼝中可以含有变量,但是接⼝中的变量会被隐式的指定为public static final变量
6. 接⼝中不能有静态代码块和构造⽅法
7. 接⼝虽然不是类,但是接⼝编译完成后字节码⽂件的后缀格式也是.class
8. 如果类没有实现接⼝中的所有的抽象⽅法,则类必须设置为抽象类
9. jdk8中:接⼝中还可以包含default⽅法
2.5实现多个接口
在Java中,类和类之间是单继承的,⼀个类只能有⼀个⽗类,即Java中不⽀持多继承,但是⼀个类可以实现多个接⼝。
注意:⼀个类实现多个接⼝时,每个接⼝中的抽象⽅法都要实现,否则类必须设置为抽象类。
2.6接口间的继承
上⾯的代码展⽰了Java⾯向对象编程中最常⻅的⽤法:⼀个类继承⼀个⽗类,同时实现多种接⼝.
接⼝可以继承⼀个接⼝,达到复⽤的效果.使⽤extends关键字.
接口1继承接口2后,接口1不用实例接口2的抽象方法