欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

接口

程序员文章站 2022-07-14 10:48:42
...

1.定义:

接口主要是用来拓展功能的,比如USB接口用来连接外置设备;

2.接口的定义格式:

interface 接口名{

}

3.接口要注意的事项 :
(1) 接口是一个特殊的类。(编译的时候也会生成 接口名.class文件,是类就可以定义变量和函数)
(2) 接口的成员变量默认的修饰符为: public static final 。那么也就是说接口中的成员变量都是常量。(必须赋值)
(3) 接口中的方法都是抽象的方法,默认的修饰符为: public abstract。(即使没有写abstract,编译器也会为我们加上abstract)
(4) 接口不能创建对象。(不能实例化,因为接口中的方法是抽象的方法。)
(5) 接口是没有构造方法的。
(6) 接口是给类去实现使用的,非抽象类实现一个接口的时候,必须要把接口中所有方法全部实现。(接口中的方法都是抽象的)

4.实现接口的格式

class  类名 implements 接口名{
	
}

5.实例一

interface A{
	//成员变量
	public static final int i = 10;
	//成员函数
	public void print();
}

class Demo1 implements A{	//Demo1实现了A接口
	public static void main(String[] args){
		Demo1 d = new Demo1();
		d.print();
	}
	//实现接口中的方法
	public void print(){
		System.out.println("这个是接口中的print方法……");
	}
}

运行结果如下图所示

接口

6.接口的作用:
(1) 程序的解耦。(低耦合)最重要
(2) 定义约束规范。
(3) 拓展功能。(哪个类实现了这个接口,哪个类就具备了这样的功能,从而提高复用性。)

注意:定义约束规范如

接口

接口

定义约束规范是:比如门户网站的增删改查是每个模块都有的,两个人开发,每个人有自己的风格。两个人都按指定的日期完成各自的功能,这两个人跳槽后又来了个五年工作经验的人对这个项目做后期维护,看完一个模块会默认其他模块都是这样的,当他去改另外模块的时候发现每个模块都有各自的风格,就没有统一的风格,一个添加的方法在每个模块起了不同的名字,各有特色。这样会导致这个网站的维护成本会变得相当的高。因为他们没有统一的风格
代码后期维护很困难。这就需要项目组长定义接口,会写出一些可能会出现相同功能的接口,码农只需要实现这些接口即可,通过接口来定义约束规范。

7.实例一

(1) 需求:普通的铅笔只有写的功能,普通的橡皮也只有涂改的功能,现在要实现带橡皮的铅笔,让铅笔既有写的功能又有涂改的功能。

(2)分析:

接口

(3)实例:

//普通的铅笔类
class Pencil{
	String name;
	public Pencil(String name){
		this.name = name;
	}
	public void write(){
		System.out.println(name+"沙沙地写……");
	}
}

//橡皮接口
interface Eraser{
	public void remove();
}

//带橡皮的铅笔
class PencilWithEraser extends Pencil implements Eraser{
	public PencilWithEraser(String name){
		super(name);
	}
	public void remove(){
		System.out.println("涂改中……");
	}
}

class Demo1{
	public static void main(String[] args){
		PencilWithEraser p = new PencilWithEraser("2B铅笔");
		p.write();
		p.remove();
	}
}
(4)运行结果

接口

8.实例二

(1)需求:在现实生活中有部分同学在校期间只会学习,但是有部分学生除了学习外还会赚钱。

(2)分析:

普通的学生类:都会学习;

接口:会挣钱的学生,因为赚钱的功能是部分学生拓展出来的功能,应该定义在接口上;

(3)实例

//普通的学生类
class Student{
	String name;
	public Student(String name){
		this.name = name;
	}
	public void study(){
		System.out.println(name+"好好学习");
	}
}

//挣钱是学生拓展的功能——定义在接口上
interface Money{
	public void makeMoney();
}

//会挣钱的学生
class MoneyStudent extends Student implements Money{
	public MoneyStudent(String name){
		super(name);
	}
	public void makeMoney(){
		System.out.println(name+"好好挣钱交学费");
	}
}

class Demo1{
	public static void main(String[] args){
		Student s = new Student("张三");
		s.study();

		MoneyStudent m = new MoneyStudent("李四");
		m.study();
		m.makeMoney();
	}
}
(4)运行结果:

接口

9.类与接口之间关系: 实现关系。

10.类与接口要注意的事项:

(1) 非抽象类实现一个接口时,必须要把接口中所有方法全部实现。
(2) 抽象类实现一个接口时,可以实现也可以不实现接口中的 方法。(抽象类中可以有非抽象方法)
(3) 一个类可以实现多个接口 。

11,疑问:Java不支持多继承,但它为什么却支持多实现

class A{	
	public void print(){
		System.out.println("AAAAAA");
	}
}
class B{
	public void print(){
		System.out.println("BBBBBB");
	}
}

class C extends A ,B{
	//错误,仅用于示例		
}

如上所示,如果Java支持多继承,会把A和B的方法都继承下来,但是这两个类有两个同名的方法,当别人new C().print()的时候,并不知道要调用哪一个类的实现,会产生冲突。而多实现不会产生这样的问题,对于实现类来说,它只需要实现一个就可以,如果调用print方法,它只会调用已经实现的这个方法,这时候不会产生冲突。
(接口与接口之间是可以多继承的,类与接口之间是可以多实现的)

12.接口与接口之间关系: 继承关系。

13.接口与接口之间要注意事项: 一个接口是可以继承多个接口的