接口和继承类的区别

目录

一.接口和继承解决的问题不同

二、接口比继承更加灵活

1.代码如下

2.接口在一定程度上实现代码解耦【即:接口规范性+动态绑定机制】

3.接口的多态性

 4.多态的传递性


一.接口和继承解决的问题不同

继承的价值主要在于:解决代码的复用性和可维护性。

接口的价值主要在于:设计、设计好各种规范(方法),让其他类去实现这些方法

二、接口比继承更加灵活

继承是满足is - a 的关系,而接口只需满足like-a关系

1.代码如下

代码如下(示例):

package com.java.interface_;

public class ExtendVSInterface {
    public static void main(String[] args) {
        LittleMonkey wukong = new LittleMonkey("悟空");
        wukong.climbing();
        wukong.swinmming();
        wukong.fly();
    }
}

//接口
interface Fishable{
    void swinmming();
}
interface Bird{
    void fly();
}


//猴子
class Monkey{
    private String name;

    public Monkey(String name) {
        this.name = name;
    }

    public void climbing(){
        System.out.println(name+"猴子会爬树...");
    }
    public String getName(){
        return name;
    }
}
//继承
//小结:当子类继承了,就自动的拥有父类的功能
// 如果子类需要扩展功能,可以通过实现接口的方式扩展
// 可以理解 实现接口 是 对java单继承机制的一种补充
class LittleMonkey extends Monkey implements Fishable,Bird{
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swinmming() {
        System.out.println(getName()+" 通过学习会游泳");
    }

    @Override
    public void fly() {
        System.out.println(getName()+"通过学习学会飞翔");
    }
}

2.接口在一定程度上实现代码解耦【即:接口规范性+动态绑定机制】

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

3.接口的多态性

1.多态参数(前面案例体现)interfacePolyParameter

在前面的usb接口案例,Usb usb,既可以接受手机对象,又可以接受相机对象,就体现了接口多态(接口引用可以指向实现了接口类的对)

package com.java.interface_;

public class InterfacePolyParameter {
    public static void main(String[] args) {
        //接口的多态体现
        //接口类型的变量if01可以指向 实现了IF接口的对象实例
        IF if01=new Monster();
        if01 =new Car();
        
        //继承体现多态
        //父类类型的变量a 可以指向 继承了AAA的子类的对象实例
        AAA a=new BBB();
        a = new CCC();
    }
}
interface IF{ }
class Monster implements IF{ }
class Car implements IF{ }

class AAA{
    
}
class BBB extends AAA{
    
}
class CCC extends AAA{ }

2.多态数组interfacePolyArr

演示一个案例给:USB数组中Phone和相机对象。Phone内还有一个特别的方法或请遍历USB数组,如果是Phone对象,除了调用USB接口定义的方法外,还需要调用phone特有方法call

package com.java.interface_;

public class InterfacePolyArr {
    public static void main(String[] args) {
        //多态数组->接口数组
        Usb[] usbs=new Usb[2];
        usbs[1]=new Camer_();
        usbs[0]=new Phone_();

        //遍历
        for (int i = 0; i <usbs.length ; i++) {
            usbs[i].work();//动态绑定....
            //类型转型
            if(usbs[i] instanceof Phone_){
                ((Phone_) usbs[i]).call();
            }
        }
    }
}

interface Usb{
    void work();
}

class Phone_ implements Usb{
    public void call(){
        System.out.println("手机可以打电话");

    }

    @Override
    public void work() {
        System.out.println("手机工作中....");
    }
}
class Camer_ implements Usb{

    @Override
    public void work() {
        System.out.println("相机工作中....");
    }
}

 4.多态的传递性

package com.java.interface_;
//多态传递现象

public class InterfacePolyPass {
    public static void main(String[] args) {
        //接口类型的变量可以指向,实现了该接口的类的对象实例化
        IG ig=new Teachar();
        //如果IG继承了IH接口,而TeachAR类实现了IG接口
        //那么,实际上就相当于Teachar类也实现了IH接口
        IH ih=new Teachar();

    }
}
interface IH{
    void hi();
}
interface IG extends IH{ }
class Teachar implements IG{
    
    @Override
    public void hi() {

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值