第十七章、JavaSE专题之面向对象高级四之接口详细剖析

  • 接口业务场景:用来制定标准,全局常量公共的抽象方法

1、接口概述

  • 接口:将一些没有实现的方法封装到一起

    • 子类实现接口:必须实现接口所有的抽象方法
  • 语法规则

interface 接口名{
    //1、属性
    //2、静态方法
    //3、默认方法   需要使用default关键字
    //4、抽象方法
}
  • 范例
//1、创建接口
interface Usb {
    public int AAA = 10;
    //1、静态方法
    static void BBB(){
        System.out.println("调用静态方法...");
    }
    //2、默认方法
    default public void CCC(){
        System.out.println("调用默认方法...");
    }
    //3、抽象方法1
    public abstract void read();
    //4、抽象方法2
    public abstract void write();
}

//2、创建YouPan子类实现接口
public class YouPan implements Usb {
    public void read(){
        System.out.println("U盘正在通过USB读取数据...");
    }
    public void write(){
        System.out.println("U盘正在通过USB写入数据...");
    }
}

//3、创建JianPan子类实现接口
public class JianPan implements Usb{
        public void read(){
            System.out.println("键盘正在通过USB接口读取数据...");
        }
        public void write(){
            System.out.println("键盘正在通过USB接口写入数据...");
        }
}

//4、创建main方法调用两个子类
public class UsbMain {
    public static void main(String[] args) {
        YouPan yp = new YouPan();
        yp.read();
        yp.write();

        JianPan jp = new JianPan();
        jp.read();
        jp.write();
    }
}
  • 运行结果
    在这里插入图片描述

2、接口使用细节

(1)接口不能实例化

(2)接口中的所有方法是public方法,接口中抽象方法,可以不用abstract修饰;

public abstract void AAA();  等同于 void AAA()

(3)一个普通类实现接口,必须实现该接口的所有抽象方法实现

(4)抽象类实现接口,可以不用实现接口的所有方法;

(5)一个类可以同时实现多个接口;

calss A extends b,c{ }

(6)接口的属性,只能是final的,而且是public static final修饰符;

(7)接口中的属性访问:接口名.属性名

interface.属性

(8)一个类不能继承其他的类,但可以继承多个别的接口;

interface A extends B,C{ }

(9)接口的修饰符,只能是public和默认,这点和类的修饰符一样的

3、接口和继承的区别

  • 接口是对java但继承机制的一种补充

(1)接口和继承解决的问题不同

  • 继承的价值:可解决代码的复用性和可维护性
  • 接口的价值:设计,设计好各种规范(方法),让其它类去实现这些方法;

(2)接口比继承更灵活

  • 继承是 is - a的关系:猫是动物
  • 接口时 like - a的关系:猫像狗一样萌

(3)接口在一定程度上实现了代码解耦【即:接口规范性+动态绑定】

  • 范例
//1、创建父类 - Monkey类
class Monkey{
    private String name;

    public Monkey(String name){
        this.name = name;
    }
    public  void climbing(){
        System.out.println("猴子会爬树...");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

//2、创建接口1 - Fishable
interface Fishable{
    void swimming();
}

//3、创建接口2 - Birdable
interface Birdable{
    void flying();
}

//4、创建子类 - LittleMonkey继承Monkey,实现Fishable,Birdable
class LittleMonkey extends Monkey implements Fishable,Birdable{
    public LittleMonkey(String name) {
        super(name);
    }

    public void swimming(){
        System.out.println(getName() + "通过学习,可以像鱼儿一样游泳...");
    }

    public void flying(){
        System.out.println(getName() + "通过学习,可以像鸟儿一样飞翔...");
    }
}

//5、创建main方法实现类LittleMonkey
public class Interface {
    public static void main(String[] args) {
        LittleMonkey lm = new LittleMonkey("无知祈");
        lm.climbing();
        lm.flying();
        lm.swimming();
    }
}
  • 运行结果

在这里插入图片描述

4、接口和抽象类的区别

接口抽象类
接口中是没有实现代码的实现抽象类中可以有普通成员方法 ,并且可以定义变量
接口中的方法修饰符号 只能是public抽象类中的抽象方法可以有public,protected,default
接口中没有构造方法可以有构造方法
  • 接口和抽象类选择

(1)当我们需要一组规范的方法的时候,我们就可以用接口,在具体的业务中,来对接口进行实现,能达到以不变应对万变,多变的需求的情况我们只需要改变对应的实现类 。
(2)如果多个实现类中有者相同可以复用的代码 这个时候就可以在实现类和接口之间,添加一个抽象类,把公共的代码抽出在抽象类中。然后要求不同实现过程的子类可以重写抽象类中的方法,来完成各自的业务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随缘清风殇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值