java中的接口(interface)

java中的接口(interface)

接口定义

接口:用interface来定于,是抽象方法和全局常量的集合。在java中,接口和类是两个并列的结构。

接口特点

  1. 使用关键字interface表示接口;
  2. 接口中的成员变量默认是由public static final修饰的。因此,通常省略掉去掉static final;
  3. 接口中的抽象方法默认是由public static修饰的。因此,通常省略掉去掉static;
  4. 接口中不能定义构造器
  5. 接口不能实例化
  6. 接口可以实现多继承,弥补了了类的单继承缺陷。
    注意
    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值