3. 接口与抽象类
3.1 接口的定义与实现
接口表示规范。在Java中定义接口使用interface 关键字,所有方法自动是public abstract。
接口的作用:
1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。从而在一定意义上实现了多继承。
2.通过接口可以指明多个类需要实现的方法。
3.通过接口可以了解对象的交互界面,而不需要了解对象所对应的类。
在java中,一般像如下方式编写接口。其中public表示该接口可以被所有的类调用。
public interface Collection{void add(Object obj);void delete(Object obj);Object find(Object obj);int size;
}
注意,接口中的方法都是抽象方法。
一个类可以实现多个接口
public class Student implements A,B,C,D{
}
main:
A s1 = new Student();
B s2 = new Student();
C s3 = new Student();
D s4 = new Student();
注:
s1只能调用接口A中声明的方法以及Object中的方法
s2只能调用接口B中声明的方法以及Object中的方法
s3只能调用接口C中声明的方法以及Object中的方法
s4只能调用接口D中声明的方法以及Object中的方法
注:必要时可以类型强制转换
例如 : 接口A 中有test() , 接口B 中有run()
A s1 = new Student();
s1.test(); B s2 = new Student();
s2.run(); if(s1 instanceof B){ ((B)s1).run();
}
3.2 抽象类的定义与实现
接口与抽象类的区别:
抽象类也是类,除了可以写抽象方法以及不能直接new对象之外,其他的和普通类没有什么不一样的。接口已经另一种类型了,和类是有本质的区别的,所以不能用类的标准去衡量接口。
声明类的关键字是class,声明接口的关键字是interface。
抽象类是用来被继承的,java中的类是单继承。
类A继承了抽象类B,那么类A的对象就属于B类型了,可以使用多态
一个父类的引用,可以指向这个父类的任意子类对象
注:继承的关键字是extends
接口是用来被类实现的,java中的接口可以被多实现。
类A实现接口B、C、D、E…,那么类A的对象就属于B、C、D、E等类型了,可以使用多态
一个接口的引用,可以指向这个接口的任意实现类对象
注:实现的关键字是implements
抽象方法是使用abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体。抽象方法的定义格式如下:
abstract void方法名称 (参数);
当一个类包含了抽象方法,该类必须是抽象类。抽象类和抽象方法一样,必须使用abstract关键字进行修饰。
抽象类的定义格式如下:
abstract class 抽象类名称{访问权限返回值类型 方法名称(参数){return [返回值] ;访问权限abstract返回值类型抽象方法名称(参数) ;}
抽象类的定义规则如下。
(1)包含一个以上抽象方法的类必须是抽象类。
(2)抽象类和抽象方法都要使用abstract关键字声明。
(3)抽象方法只需声明而不需要实现。
(4)如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法。
注意:
使用abstract关键字修饰的抽象方法不能使用private修饰,因为抽象方法必须被子类实现,如果使用了private声明,则子类无法实现该方法。