Java接口

本文详细阐述了接口的定义、规范、特性和用法,对比了接口与抽象类的异同,介绍了接口在多继承、拓展性和维护性方面的优势,以及在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、接口:用关键词Interface修饰,一般用于定义对象的拓展功能,也就是在继承之外还需要这个对象具备一些功能,是对抽象类的扩展,它是一种特殊的“抽象类”。一个类通过继承接口的方式,从而来继承接口的抽象方法。

二、接口的规范性
接口相当于只是定义类一种规范,它并不在乎类里面的数据或者是如何实现某些方法的;
接口只规定了这些类里必须要实现的方法,所以规范和实现互不影响,这也就增强了拓展性和可维护性。

三、使用接口的好处:在于它的拓展性和维护性好,所以开发中经常用到(相当于定义了一种标准)。

四、关于接口的特性

  1. 接口可以继承多个接口(多重继承),但接口只能继承接口,不能继承类,如果往接口中添加方法,就必须改变实现该接口的类;
    定义格式:
    [修饰符] interface 接口名 extends 父接口1,父接口2…{
    //零到多个静态常量定义
    //零到多个抽象方法定义
    }
    修饰符public、abstract
//继承多个接口,接口允许多继承
//注意:接口只能继承接口
public interface InterfaceThree extends InterfaceOne,InterfaceTwo{

}
  1. 接口的实现类必须实现接口中的所有抽象的方法:
    接口是无法被实例化的,因为它是一种特殊的“抽象类”,不存在方法的实现,但是它可以被实现。类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。一个类继承某个接口,则需要实现这个接口中所有的方法,除非实现该接口的类是抽象类。
public class Demo1 implements InterfaceOne{
	//实现接口里的所有方法
	@Override
	public void sleep() {
		System.out.println("睡觉");
	}
	@Override
	public void swim() {
		System.out.println("游泳");
	}
	@Override
	public void test() {
		System.out.println("测试");
	}	
}

实例化接口的实现类:

public class Demo2 {
	public static void main(String[] args) {
	//接口不能实例,接口能够作为类型的变量,但是它可以实例接口的实现类
		InterfaceOne interfaceOne=new Demo1();
		interfaceOne.sleep();
		interfaceOne.swim();
		interfaceOne.test();
	}
}
  1. 类也可以实现多个接口:
    格式:[修饰符] class 类名 implements 接口1[, 接口2, 接口3…, …] { }
//一个类可以实现多个接口
public class Demo1 implements InterFaceOne,InterFaceTwo{
	@Override
	public void print2() {
		// TODO Auto-generated method stub
	}
	@Override
	public void print() {
		// TODO Auto-generated method stub
	}
	@Override
	public void print1() {
		// TODO Auto-generated method stub
	}
}
  1. 接口的用法:
    接口不能实例,接口能够作为类型的变量,接口作为一个类型来new,new的是接口的实现类
    格式:接口 变量名称=new 接口的实现类();

  2. 接口与类的区别:接口和类的编写方式很相似,但接口并不是类,它们的概念是完全不同的,类描述的是对象的属性和方法,而接口是包含类要实现的方法。

  3. 接口与类的关系:可以说是实现关系,也可以是继承关系,根据情况而定。

  4. 接口是隐式抽象的,声明一个接口时,不需要使用abstract关键字

  5. 接口中的每一个方法也是隐式抽象的,没有普通方法,声明时也不需要abstract关键字

  6. 接口中的方法都是公有的(默认修饰符public),不能使用其他修饰符;接口不能有构造器,没有main方法,不能运行;

  7. 编译时自动为接口里定义的方法添加public abstract修饰符

  8. Java接口里的成员变量只能是public static final共同修饰的(静态常量),并且必须在声明的时候赋初始值,可以不写public abstract final,编译时会自动添加

public interface InterFaceOne {
	public static final int INT_A=10;//声明的时候必须赋初值
	
	//编译时自动为接口里定义的成员变量添加上public static final修饰符
	int INT_B=10;//不写修饰符,它会自动加上
	
	//只能存在抽象方法
	public abstract void print();
	void print1();//编译时自动为接口里定义的方法添加public abstract修饰符
}

五、接口存在的意义
接口只是定义了一种规范(标准),接口并不提供功能,只提供方法,方法名称,方法形参,返回类型,不作出实际的东西,它是通用的规范的。不同的类只要实现这个接口,我们就可以用同一种规范(方法)去调用不同的产品;比如不同的数据库连接同一个接口,把JDBC接口定义好之后,用这个接口连接数据库,不同的数据库,都基于同一个接口,方法一致,就不需要更改代码。

六、抽象类和接口的对比

  1. 都位于继承的顶端,用于被其他类实现或继承;
  2. 都不能实例化;
  3. 都包含抽象方法,其子类都必须重写这些抽象方法;
  4. 抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性。
  5. 接口只能包含抽象方法; 一个类只能继承一个直接父类(可能是抽象类),但可以实现多个接口;(接口突破了Java的单继承)。
  6. 接口不能有构造函数,抽象类是可以有构造函数的
  7. 接口没有main方法,不能运行;而抽象方法有main方法。
  8. 它可以有默认的方法实现;接口完全是抽象的,它根本不存在方法的实现。

七、如何对二者进行选择:
优先选用接口,尽量少用抽象类;
若需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

注意:如果不可以或没有创建对象,那么我们必须加上static修饰,既然不能用对象调用,就只好用类去调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值