Java接口(interface)

上篇小编讲到了抽象类,这篇小编将带领大家进入接口类,一起探索接口类的奥秘。

在这里插入图片描述

1.接口的概念

2.接口的语法

3.接口怎么用?

4.实现多个接口
5. 接口间的继承

一:接口的概念:
生活中我们可以遇到各种各样的接口,例如:电脑的usb接口、插座等等比比皆是。
电脑的USB口上,可以插:U盘、鼠标、键盘…所有符合USB协议的设备;
电源插座插孔上,可以插:电脑、电视机、电饭煲…所有符合规范的设备。

接口(Interface)是计算机科学中的一个核心概念,尤其在面向对象编程(OOP)中扮演着至关重要的角色。接口定义了一组规范或契约,这组规范或契约由一组方法(有时也包括属性、事件等,具体取决于编程语言)组成,但不提供这些方法的实现。接口的主要目的是指定一组方法,让不相关的类可以实现这些方法,从而确保这些类遵循相同的协议或标准。

二:接口的语法与特性:
1.抽象性:接口是抽象的,它只定义方法或属性的签名(即名称、参数列表和返回类型),而不提供具体的实现。实现接口的类必须提供接口中所有方法的具体实现。
2.多态性:通过接口,可以实现多态性。多态性允许我们以统一的接口来操作不同的对象,这些对象可以是接口的不同实现。这提高了代码的灵活性和可扩展性。
3.解耦:接口有助于实现高内聚低耦合的设计原则。通过定义接口,我们可以将类的实现细节与使用该类的代码分离开来,降低了系统各部分之间的依赖关系。
4.标准化:接口为不同的类提供了一种标准化的通信方式。只要类实现了某个接口,就可以保证它遵循了接口定义的规范,从而可以与其他遵循相同接口的类进行交互。
5.灵活性:接口允许我们在不修改现有代码的情况下,通过添加新的实现类来扩展系统的功能。这种能力使得系统更加灵活和易于维护。
6.强制实现:在某些编程语言中,接口可以强制实现接口的类必须提供接口中所有方法的具体实现,这有助于确保类的完整性和一致性。

特性:接口类型是一种引用类型,但是不能直接new接口的对象; 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错);接口中的方法是不能在接口中实现的,只能由实现接口的类来实现;重写接口中方法时,不能使用默认的访问权限;接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量;接口中不能有静态代码块和构造方法;如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,跟推荐方式4,代码更简洁
}

注意:

  1. 创建接口时, 接口的命名一般以大写字母 I 开头.
  2. 接口的命名一般使用 “形容词” 词性的单词.
  3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.
  4. 三:接口的使用接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法
public class 类名称 implements 接口名称{
// ...
}
//类与接口之间是implements实现关系

定义接口

public interface Animal {  
    // 定义一个方法,但不提供实现  
    void eat();  
  
    // 接口中可以定义多个方法  
    void sleep();  
}

创建类实现接口

public class Dog implements Animal {  
    // 实现eat方法  
    @Override  
    public void eat() {  
        System.out.println("Dog is eating.");  
    }  
  
    // 实现sleep方法  
    @Override  
    public void sleep() {  
        System.out.println("Dog is sleeping.");  
    }  
  
    // Dog类还可以有自己的方法和属性  
    public void bark() {  
        System.out.println("Dog is barking.");  
    }  
}

测试类

public class TestInterface {  
    public static void main(String[] args) {  
        // 创建Dog类的实例  
        Animal myDog = new Dog();  
  
        // 调用接口中定义的方法  
        myDog.eat(); // 输出: Dog is eating.  
        myDog.sleep(); // 输出: Dog is sleeping.  
  
        // 注意:我们不能直接调用Dog类特有的方法,除非我们将myDog的类型转换为Dog  
        // ((Dog) myDog).bark(); // 如果需要调用bark(),可以这样显式转换类型  
    }  
}

四:实现多个接口

// 定义第一个接口  
interface Flyable {  
    void fly();  
}  
  
// 定义第二个接口  
interface Swimmable {  
    void swim();  
}  
  
// 定义一个类实现Flyable和Swimmable接口  
class Duck implements Flyable, Swimmable {  
    // 实现Flyable接口中的fly方法  
    @Override  
    public void fly() {  
        System.out.println("Duck is flying.");  
    }  
  
    // 实现Swimmable接口中的swim方法  
    @Override  
    public void swim() {  
        System.out.println("Duck is swimming.");  
    }  
  
    // Duck类还可以有自己的方法和属性  
    public void quack() {  
        System.out.println("Duck is quacking.");  
    }  
}  
  
// 测试类  
public class TestMultipleInterfaces {  
    public static void main(String[] args) {  
        // 创建Duck类的实例  
        Duck myDuck = new Duck();  
  
        // 调用Flyable接口中的方法  
        myDuck.fly(); // 输出: Duck is flying.  
  
        // 调用Swimmable接口中的方法  
        myDuck.swim(); // 输出: Duck is swimming.  
  
        // 调用Duck类特有的方法  
        myDuck.quack(); // 输出: Duck is quacking.  
    }  
}

五:接口间的继承
在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。例如:

interface Irun{
void run();
}
interface Ifly{
voud fly();
}
//两栖类
interface IAmphibious extends Irun,Ifly{
}
interface Frog implements IAmphibious{
}

通过接口继承创建一个新的接口 IAmphibious 表示 “两栖的”. 此时实现接口创建的 Frog 类, 就继续要实现 run 方法, 也需要实现 fly方法.

// 定义第一个接口  
interface Animal {  
    void eat();  
}  
  
// 定义第二个接口,继承自Animal接口  
interface Mammal extends Animal {  
    void nurseYoung();  
}  
  
// 定义一个类实现Mammal接口,从而也间接实现了Animal接口  
class Dog implements Mammal {  
    // 实现Animal接口中的eat方法  
    @Override  
    public void eat() {  
        System.out.println("Dog is eating.");  
    }  
  
    // 实现Mammal接口中的nurseYoung方法  
    @Override  
    public void nurseYoung() {  
        System.out.println("Dog is nursing its young.");  
    }  
}  
  
// 测试类  
public class TestInterfaceInheritance {  
    public static void main(String[] args) {  
        // 创建Dog类的实例  
        Dog myDog = new Dog();  
  
        // 调用从Animal接口继承的方法  
        myDog.eat(); // 输出: Dog is eating.  
  
        // 调用Mammal接口特有的方法  
        myDog.nurseYoung(); // 输出: Dog is nursing its young.  
    }  
}

在这里插入图片描述

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值