接口(包括与抽象类的对比)

上一篇《封装、继承、多态》中介绍了抽象类——一种不能被实例化的特殊类,其子类可以通过继承调用其方法,但是 java 是单根继承,一个类只能继承一个父类,那么多根继承在 java 中是否就实现不了呢?

一个类的确只能继承一个类,但可以实现多个接口,这样也可以达到“多根继承”的效果

接口

接口不是类,是一系列静态常量和抽象方法的集合,接口不能被实例化,但可以被类实现。类似于继承,实现接口的非抽象类必须实现其所有的抽象方法。

定义接口的关键字:interface

//接口的创建

public interface Paper {
	public String getPaper(String size);
}

实现接口的关键字:implements 

//接口的实现(类似于类的继承)

//实现一个接口
public class A4Paper implements Paper {

	@Override
	public String getPaper() {
		return "A4纸";
	}
}

//实现多个接口,各接口之间用 ,隔开
public class Printer implements Paper, Ink {   //这里的 Ink 也是一个接口

    @Override
	public String getPaper(String size) {
		System.out.println("在"+size+"纸上打印");
		return size;
	}
}

接口也可以作为变量,虽然接口不可以被实例化,但可以作为变量指向其实现类,和抽象父类指向子类实例相同

public class Printer {
	
	//类和对象可以作为数组元素,自然也可以作为变量
	//接口在这里可以看作一个抽象父类作变量,“继承”(实现)它的类可以作为它的实例
	private Paper paper;
	
	public Printer(Paper paper) {
		this.paper = paper;
	}

	public Printer() {}

	public Paper getPaper() {return paper;}
	public void setPaper(Paper paper) {this.paper = paper;}
	
	public void getPrint() {
		System.out.println("在"+this.paper.getPaper()+"打印");
	}
}

接口的特性

  • 接口不能被实例化,也没有构造方法
  • 接口内的变量都是公共静态常量,方法都是公共抽象方法(方法的public abstract可以省略)
  • 实现类必须实现其所有方法(除非实现类是抽象类)
  • 一个实现类可以实现多个接口,也可以继承的同时实现接口
  • 一个接口也可以继承多个接口,但接口不能实现接口(extends,继承多个也用 ,隔开)

抽象类和接口的相同点:都不能被实例化,其非抽象的子类/实现类都要实现其全部的抽象方法

接口与抽象类的不同点

  • 抽象类是类,关键字 class ;接口不是类,关键字 interface
  • 抽象类可以有构造方法、非公共静态常量、实例方法;接口只能有公共静态常量和公共抽象方法
  • 继承抽象类关键字 extends ;实现接口关键字 implements
  • 一个类只能继承一个抽象类,但可以实现多个接口
  • 抽象类利于代码复用,接口利于代码维护
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值