interface接口基础

一.什么是接口

1.在抽象类的使用中,可以给子类内容提供很好的规范和模板,其子类必须要重写实现抽象父类的抽象方法,但是有些时候,有些子类并不需要重写父类的一些抽象方法,为了解决这个问题,接口的就诞生了,接口是比抽象类还要抽象的抽象类

2.接口就是比“抽象类”还要抽象的“抽象类”。在接口中所有的方法都是抽象方法(比较稳定),不可提供任何实现

  • 接口就是“规范” 定义了:“如果你是…你就必须…”的规则
  • 接口全面的实现了 规范和具体实现 的分离

3.声明格式

  • [访问修饰符] interface 接口名 [extends 父接口1,父接口2]{
  • 常量定义
  • 方法定义
  • }
  • 访问修饰符:只能为public或默认
  • extends:接口可以多继承
  • 常量:接口中的属性只能是常量、总是 public static final修饰 不写也是
  • 方法:接口中的方法只能是 public abstract 。不写也是
  • 1.实现类通过implements来实现接口中的规范
  • 2.接口不能创建实例,但是可以用于声明引用变量类型
  • 3.一个类实现了一个接口,就必须实现接口中所有的方法,并且这些方法都是public的

在这里插入图片描述

二.测试接口和实现类 实例1

public class Test01 {
	public static void main(String[] args) {
//		Fly f = new Fly();//接口是抽象的 不能被实例化
		Fly f = new Angel(); //但是可以用于声明引用变量类型
		f.fly();   //天使会飞
//		f.simile();无法调用 此时编译器认为f是接口的实例
	
		Angel a = new Angel();
		a.smile();  //天使在微笑
	
		Kindness k = new SuperMan();
		k.helpOthers();
	}
}

/**飞行接口*/
interface Fly{
	void fly();
}
/**善良接口*/
interface Kindness{
	void helpOthers();
}

class Angel implements Fly,Kindness{
	@Override
	public void helpOthers() { 	//实现接口的方法
		System.out.println("天使喜欢帮助他人");
	}
	@Override
	public void fly() {		//实现接口的方法
		System.out.println("天使会飞");
	}
	public void smile() {			//自己独特的方法
		System.out.println("天使在微笑");
	}
}
class SuperMan implements Kindness{
	@Override
	public void helpOthers() {		//实现接口的方法
		System.out.println("好人喜欢帮助他人");
	}
}
class BirdMan implements Fly{
	@Override
	public void fly() {		//实现接口的方法
		System.out.println("鸟人会飞");
	}
}

这个案例表明
1.class Angel implements Fly,Kindness 一个实现类可以实现多个接口
2.Fly f = new Angel(); 接口可以用于声明引用变量类型,此时f只能调用接口中的方法和属性,运行时系统才知道f是天使的实例。

三.接口 继承的综合运用 实例二

public class Test02 {
	public static void main(String[] args) {
		show(new Cattle());
		System.out.println();
		show(new Cat());
		System.out.println();
		show(new Dog());	
	}

	public static void show(Animal a) {
		a.eat();
		if(a instanceof Work) //如果a是Word的实例 那么就把a转换为Work
			((Work) a).work();
	}
}
/**动物父类*/
class Animal{
public void eat() {
	System.out.println("动物吃饭");
}
}
/**工作接口*/
interface Work{
void work();
}

/**Dog子类*/
class Dog extends Animal implements Work{
@Override
public void work() {
	System.out.println("狗可以看门");
}
public void eat() {
	System.out.println("狗喜欢吃骨头");
}
}
/**Cattle子类*/
class Cattle extends Animal implements Work{
	@Override
public void work() {
	System.out.println("牛可以耕地");
}
public void eat() {
	System.out.println("牛喜欢吃草");
}
}
/**Cat子类*/
class Cat extends Animal {
public void eat() {
	System.out.println("猫喜欢吃鱼");
}
}

运行结果
在这里插入图片描述

所以说:
new Cattle()既是Animal的实例也是Work的实例
new Dog()既是Animal的实例也是Work的实例
new Cat()只是是Animal的实例

另外

if(a instanceof Work) //如果a是Word的实例 那么就把a转换为Work
			((Work) a).work();

这里需要说一下,在Java中无论试讲一个类向上转型为父类对象,还是向上转型为抽象类对象,或者向上转型为该类的实现接口,都是可以的

四.接口的继承

接口可以继承接口,直接用一个例子来解释
在这里插入图片描述
Test03类实现了C接口,C接口继承了A,B接口,所以Test03类必须重写实现ABC全部接口

四.接口 抽象类 实现类的区别

  • 普通类:具体实现
  • 抽象类:具体实现,抽象方法
  • 接口:抽象方法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值