java se接口

本文详细介绍了接口与抽象类的区别,包括它们在Java中的使用、特性以及实现方式。通过示例代码说明了接口的多重实现和继承关系,以及在实际问题(如电脑连接设备)中的应用。接口强调多实现,抽象类则允许部分方法实现,二者共同促进了代码的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

接口

概念:

  • 就是抽象类的一种特殊表现形式。当一个抽象类中,
  • 所有的方法都是抽象方法时该类就可以用接口来表示。
  • 接口不是类。

由于接口中没有成员函数,成员变量,构造函数,静态函数,静态变量(其变成了全局静态常量)。
因为其没有构造函数,所以其不能在创建实例化对象。当接口引用指向实现实例的时候,只能调用

接口不写访问权限修饰符的时候是默认的

interface  接口名{

}             

接口中的变量与函数的特殊含义

  • 接口中的变量默认为公共静态常量
  • 接口中的函数默认是公共抽象的函数
interface InterfaceA{
    // 这里的num已经不是成员变量的含义了,默认是public static final类型了
	int num;
	// 这里的方法默认是public abstract类型
	void show;
}

接口与类的关系:

类与类之间是单继承,类与接口之间是多实现的关系,接口与接口之间是多继承的关系

类与接口之间的关系用implements关键字实现

  • 要么类实现接口中的方法
  • 要么声明为abstract

单实现:

interface InterfaceA{
	void show();
}
class DemoA implements InterfaceA{
	@override
	public void show(){
		System.out.println();
	}
abstract class DemoB implements InterfaceA{
	//若不想重写接口A中的方法,可以将该类定义为抽象类

}

类与接口之间是多实现的关系

interface InterfaceA{
	void showA();
}
interface InterfaceA{
	void showB();

}
class DemoA implements InterfaceA{
	@override
	public void show(){
	System.out.println();
	}
class DemoB implements InterfaceA,InterfaceB{
	@Override
	public void showA(){}
	@Override
	public void showB(){}
}

接口与接口中的多继承:

interface InterfaceA{
	void showA();
}
interface InterfaceB{
	void showB();
}
interface InterfaceC extends InterfaceA,InterfaceB{
	void showC();
}
public class Sample implements InterfaceC{
	@Override
	public void showA() {

	}
	@Override
	public void showB() {
	}
	@Override
	public void showC() {
	}
}

一个接口可以继承多个接口,而若该接口被一个类实现时要实现所有接口中的方法
注意:接口与接口之间没有实现关系,同时也没有抽象接口这个东西。

接口的特点:

  • 接口中的变量都是全局静态常量
  • 接口中的函数默认是公共抽象的函数
  • 接口不可以创建对象
  • 子类必须覆盖接口中所有的抽象方法,或生命为abstract
  • 类与接口之间可以存在多实现关系
  • 接口与接口之间有多继承关系,类与类之间时单继承关系

类与类之间的单继承的原因:

  • 若可以多继承,若在父子类中有两个同名的方法,那么在类实例化调用时会产生调用的二义性,不知道去执行那一个方法。

接口与抽象类的区别:

相同:

  • 都位于继承或实现的顶端
  • 都不能实例对象
  • 都包含 抽象方法,其子类必须覆盖这些方法

不同:

  • 一个类只能继承一个父类,但可以实现多个接口
  • 抽象类中可以存在一些 实现好的方法,有部分未实现的方法由子类来决定;接口中只能 包含抽象方法,子类必须完全实现

一个用接口实现的简单电脑连接实例

public class Electric {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse =  new Mouse();
        KeyWorld kw = new KeyWorld();
        Cammer cammer = new Cammer();
        computer.getDev1(mouse);
        computer.getDev2(kw);
        computer.getDev3(cammer);
    }

}
interface USB{
    void getConnect();
}
class Computer{
    //获取USB
    public void getDev1(USB dev){
        System.out.println("电脑连接设备1");
        dev.getConnect();
    }
    public void getDev2(USB dev){
        System.out.println("电脑已连接设备2");
        dev.getConnect();
    }
    public void getDev3(USB dev){
        System.out.println("电脑已连接设备3");
        dev.getConnect();
    }

}
class Mouse implements USB{
    @Override
    public void getConnect() {
        System.out.println("鼠标已连接,开始运行");
    }
}
class KeyWorld implements USB{
    @Override
    public void getConnect() {
        System.out.println("键盘已连接,开始运行");
    }
}
class Cammer implements USB{
    @Override
    public void getConnect() {
        System.out.println("相机已连接,开始运行");
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张不会打篮球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值