java学习笔记之接口——2021/03/21

接口

一、概念

  • 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,java不支持多重继承。
  • 有了接口,就可以得到多重继承的效果。
  • 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现

1、实现接口类

class subClass implements InterfaceA{ }

  • 一个类可以实现多个接口,接口也可以继承其他接口

2、接口的特点

  1. 用interface来定义
  2. 接口中的所有成员变量都默认是由public static final修饰的
  3. 接口中的所有方法都默认是由public abstract修饰的
  4. 接口没有构造器
  5. 接口采用不多层继承机制

二、接口定义举例

在这里插入图片描述

//TestIn.java 新建interface文件,不是class文件
public interface TestIn{
	int ID = 1;//等同public static final int ID = 1;

	void test();//public abstract void test();
}
//TestIn1.java 新建interface文件,不是class文件
public interface TestIn1{
	void test1();
}
//TestInImp1.java
/**
一个类只能继承一个父类
 一个类可以实现多个接口,多个接口用,分隔
*/
public class TestInImp1 implements TestIn,TestIn1{
	@Override
	public void test(){
	}
	
	@Override
	public void test1(){
	}
}

三、注意

  1. 实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化
  2. 接口的主要用途就是被实现类实现(面向接口编程)
  3. 与继承关系类似,接口与实现类之间存在多态性
  4. 如果一个类既要继承父类,又要实现接口,则先继承(extends),再实现接口(implements)
  • public class A extends Person implements TestIn,TestIn1

四、接口的作用

接口和抽象类很相似,好像接口能做的事用抽象类也能做,为什么还要用接口呢?
在这里插入图片描述

  • 人类是由猴子进化来的,假如要是穿越回到过去,改变了猴子(猴子多了一个眼睛),对现在的人类会造成什么影响?
    • 从这个假设上可以看出,父类需要的稳定的抽象,如果要父类老是在改,基于这个父类的子类,子类的子类等等这些子类都有受到影响。
    • 有时我们又确实需要给父类增加一些方法,那么就不能直接在父类上下手,只能新建一个接口,在接口上扩展方法,其他需要的子类自行去实现接口

五、接口应用举例

1、用java描述会唱歌的厨子是个老师

在这里插入图片描述
在这里插入图片描述

//Person1.java
public abstract class Person1{
	int age;
	String name;
	int sex;

	public abstract void showInfo();
}
//厨艺的接口
//Cooking.java
public interface Cooking{
	void fry();//炒菜
}
//唱歌的接口
//Sing.java
public interface Sing{
	void singing();//唱法
}
//SCTeacher.java
/**
描述会唱歌的厨子是个老师
*/
public class SCTeacher extends Person1 implements Cooking,Sing{
	String course;//教的科目

	public void setInfo(){
		super.age = 27;
		super.name = "王富贵";
		super.sex = 1;

		this.course = "数学";
	}

	@Override
	public void showInfo(){
		System.out.println("会唱歌的厨子的老师的信息是:");
		System.out.println(super.age);
		System.out.println(super.name);
		System.out.println(super.sex);
		System.out.println(this.course);
		
	}
	
	@Override
	public void fry(){
		System.out.println(super.name + "老师拿手的厨艺是炒菜");
	}

	@Override
	public void singing(){
		System.out.println(super.name + "老师擅长美声唱法");
	}
}
//Test.java
	SCTeacher sct = new SCTeacher();

	sct.setInfo();
	sct.fry();
	sct.singing();

2、一个类可以实现多个无关的接口

与继承关系类似,接口与实现类之间存在多态性
在这里插入图片描述
体现了对象的多态。

六、接口的其它问题

  1. 如果实现接口的类中没有实现接口的全部方法,必须将此类定义为抽象类
  2. 接口也可以继承另一个接口,使用extends关键字
    在这里插入图片描述

七、关于接口和抽象类的总结

  • 抽象类是对于一类事物的高度抽象,其中既有属性也有方法
  • 接口是对方法的抽象,也就是对一系列动作的抽象
    • 当需要对—类事物抽象的时候,应该是使用抽象类,好形成一个父类
    • 当需要对一系列的动作抽象,就使用接口,需要使用这些动作的类去实现相应的接口即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值