JAVA 基础学习笔记(7) 接口

接口这个东西我也没怎么自己编写过,不过一写有接口的程序,我还是能明显感觉到它的神奇作用的。

接口的定义

接口在面向对象编程中也是一种重要的概念,它定义了一组方法(或称为接口成员),而不提供具体的实现。接口可以被类实现,使得实现类必须提供接口中定义的所有方法的具体实现。

接口的作用

  1. 定义契约:接口定义了一个类或对象应该具有的方法。相当于它定义了一个合同或契约,约定了类或对象与外部世界的交互方式。通过接口,可以清楚地知道哪些方法必须实现,以及应该如何使用实现类的实例。

  2. 实现多态:接口允许一个类实现多个接口,从而实现多态性。一个类可以同时具有不同接口的行为特征,这样在不同的上下文中可以使用该类的不同功能。注意:继承也能实现多态性,但在Java中,语法上是不允许进行多继承的,即子类不能同时继承多个父类。所以说接口是多继承的另一种方式。

  3. 解耦与灵活性:接口将方法的定义与实现解耦,使得实现类可以根据具体需要提供不同的实现逻辑,而不需要改变接口的定义。这提供了更好的灵活性,使得系统可以根据需求随时替换不同的实现类。

        这里确实有种不说人话的感觉,什么是解耦?看过百度百科后,对它还是一知半解,

        

 

在编程中, 解耦(Decoupling)指的是减少代码之间的依赖性,以降低不同组件、模块或类之间的耦合程度。解耦的目的是使代码更加模块化、可维护和可扩展,以提高代码的灵活性和可重用性。

举一个不太恰当的例子,听说过人彘没?

 

假如人类是被编程出来的,眼珠,手,脚,耳朵,鼻子,舌头这些都是耦合性稍低的代码 ,也就是说人类失去了这些功能,虽然几乎是废了,但确实是有可能存活的,但假如失去了人的身体,或者说失去了人的大脑这些耦合性较高的代码,那这个人就直接没了。这就是耦合性高低的区别。

那么灵活性又怎么体现呢,这一般得放在科幻的角度去看,眼睛,手,脚这些可以看作是人这个复杂代码的接口,自然中,我们只有用人手,人脚这些唯一的事物去实现这个接口,但在未来,我们很可能为那些残疾人提供机器臂等现代工具,就像超级英雄电影里的一个叫啥来着的,忘了,他就是一个手用的是机器臂,最后好像还没打赢蜘蛛侠。到时候,想要个金色的手臂,还是想要个猛男粉的手臂完全取决于自己的爱好,这就是接口的灵活性。

      4. 接口继承:接口与接口之间也可以存在继承关系,一个接口可以继承另一个或多个接口。这种继承关系使得接口的组织更加灵活,可以通过继承关系构建更复杂的接口层次结构。这里前面说到过,接口是多继承的实现方式。

     5.规范与约束:接口定义了一组规范和约束,使得不同的实现类能够遵循相同的接口,从而提高代码的可读性和可维护性。接口还可以用作文档工具,提供给开发者使用,并指导实现类的编写。这就是比较高级,企业编程或者大佬使用的接口的概念了,我现在还没接触过。

代码实现

这里使用教程经常用到的动物类:

 创建动物接口,

用狗类和猫类去实现接口,重写里面的方法

public interface Animal {
    void makeSound();
}

class Cat implements Animal {
    public void makeSound() {
        System.out.println("Meow");
    }
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("Woof");
    }
}

 主方法

    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();

        cat.makeSound();  // 输出:"Meow"
        dog.makeSound();  // 输出:"Woof"

    }

解耦与灵活性的代码实现 

 这里我们以人类问候的方法为例,我觉得本质上与多态的区别不大,就一笔带过,不分开写代码了。

public interface Greeting {
    void greet();//提供一个问候的规范方法
}



public class FormalGreeting implements Greeting {
    public void greet() {
        System.out.println("Good morning!");//这是正式问候
    }
}

class CasualGreeting implements Greeting {
    public void greet() {
        System.out.println("Hey, what's up?");//这是随性问候
    }
}

//定义一个人的类
public class Person {
    private Greeting greeting;//具有问候方式这一属性(注意这是一个接口)

    public Person(Greeting greeting) {//提供含问候方式的构造器
        this.greeting = greeting;
    }

    public void sayHello() {//提供与他人打招呼的方法
        // ...
        greeting.greet();//会使用接口中的方法
        // ...
    }
}
public static void main(String[] args){
    Greeting formalGreeting = new FormalGreeting();//将正式问候类创建一个对象
    Person person1 = new Person(formalGreeting);用这个对象放到构造器里,来创建一个人的对象
    person1.sayHello();  // 输出:"Good morning!",因为是用正式问候类的对象去构造的
    
    Greeting casualGreeting = new CasualGreeting();//与上同理
    Person person2 = new Person(casualGreeting);
    person2.sayHello();  // 输出:"Hey, what's up?"
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

罗不丢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值