java中的接口(interface)
接口定义
接口:用interface来定于,是抽象方法和全局常量的集合。在java中,接口和类是两个并列的结构。
接口特点
- 使用关键字interface表示接口;
- 接口中的成员变量默认是由public static final修饰的。因此,通常省略掉去掉static final;
- 接口中的抽象方法默认是由public static修饰的。因此,通常省略掉去掉static;
- 接口中不能定义构造器;
- 接口不能实例化;
- 接口可以实现多继承,弥补了了类的单继承缺陷。
注意:
jdk7及以前:只能够定义全局常量和抽象方法。
jdk8:除了定义全局常量和抽象方法之外,还可以定义静态(static)方法、默认(default)方法
类实现(implements)接口
//格式
class Person implements interfaceA{}
一个类可以实现多个接口,接口也可以继承其它接口。 若有继承(extends),则要写到implements前面。
//格式
class Person extends Object implements interfaceA,interfaceB{}
java开发中,接口通过让类去实现(implements)的方式来使用.
- 如果实现类覆盖了接口中的所有的抽象方法,则此实现类就可以实例化。
- 如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类。
接口综合举例
定义一个接口用来实现两个对象的比较。
interface CompareObject{
public int compareTo(Object o); //若返回值是 0 , 代表相等; 若为正数,代表当
前对象大;负数代表当前对象小
}
public interface CompareObject {
//若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
public int compareTo(Object o);//省略了static
}
定义一个Circle类,声明redius属性,提供getter和setter方法
public class Circle {
private Double radius;
public Circle() {
super();
}
public Circle(Double radius) {
super();
this.radius = radius;
}
public Double getRadius() {
return radius;
}
public void setRadius(Double radius) {
this.radius = radius;
}
}
定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
public class ComparableCircle extends Circle implements CompareObject{
public ComparableCircle(double radius){
super(radius);
}
@Override
public int compareTo(Object o) {
if(this == o){
return 0;
}
if(o instanceof ComparableCircle){
Circle c = (ComparableCircle)o;
//错误的,int强转会损失精度,万一2.3-2.4,强转之后为0,所以应该进行正负数判断
// return (int)(this.getRadius() - c.getRadius());
//正确的方式一
// if(this.getRadius() > c.getRadius()){
// return 1;
// }else if(this.getRadius() < c.getRadius()){
// return -1;
// }else{
// return 0;
// }
//正确的方式二
//当属性radius声明为Double类型时,可以调用包装类的方法
return this.getRadius().compareTo(c.getRadius());
}else{
// return 0;
throw new RuntimeException("传入的数据类型不匹配");
}
}
}
定义一个测试类InterfaceTest,创建两个ComparableCircle对象,调用compareTo方法比较两个类的半径大小。
public class ComparableTest {
public static void main(String[] args) {
ComparableCircle test1 = new ComparableCircle(3.2);
ComparableCircle test2 = new ComparableCircle(3.3);
int compareValue = test1.compareTo(test2);
if(compareValue > 0){
System.out.println("test1对象大");
}else if(compareValue < 0){
System.out.println("test2对象大");
}else{
System.out.println("test1和test2一样大");
}
int compareValue1 = test1.compareTo(new String("AA"));//拋异常
// System.out.println(compareValue1);
}
}
参考:
https://www.bilibili.com/video/BV1Kb411W75N/?p=371&vd_source=e3d2dcdad07ba1c727f3c9e7654f60b5