栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java

文章目录
  • 继承VS接口
    • 解决问题不同
    • 接口比继承更加灵活
    • 接口在一定程度上实现代码解耦 [ 即,接口规范性 + 动态绑定]
  • 接口多态

继承VS接口
public class ExtendVsInterface {
    public static void main(String[] args) {
        LittleMonkey WuKong = new LittleMonkey("悟空");
        WuKong.climbing();
        WuKong.swimming();
        WuKong.flying();
    }
}

class Monkey{
    private String name;

    public String getName() {
        return name;
    }

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

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

    public void climbing(){
        System.out.println(name + "猴子会爬树...");
    }
}

class LittleMonkey extends Monkey implements Fishable,Birdable{

    public LittleMonkey(String name) {
        super(name);
    }

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

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

interface Fishable{
    void swimming();
}

interface Birdable{
    void flying();
}
解决问题不同

继承的价值主要在于:

​ 解决代码的复用性和可维护性

接口的价值主要在于:

​ 设计。设计好各种规范(方法),让其它类去实现这些方法(即,更加的灵活)

接口比继承更加灵活

接口比继承更加灵活,继承是满足 is - a的关系,接口只需满足 like - a的关系

接口在一定程度上实现代码解耦 [ 即,接口规范性 + 动态绑定] 接口多态

1)多态参数

public class InterfacePolyParameter {
    public static void main(String[] args) {
//        接口:接口类型的变量可以指向 实现了IF接口类的对象实例
        IF if_01 = new Monster();
        if_01 = new Car();
        
//		  继承:父类类型的变量可以指向子类的对象实例 
        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)多态数组

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

        for (int i = 0; i < usbs.length; i++) {
            usbs[i].work(); //动态绑定
//            需要进行类型的向下转型
            if (usbs[i] instanceof Phone_){ //判断运行类型是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 Camera_ implements Usb{
    @Override
    public void work() {
        System.out.println("相机工作中......");
    }
}

3)接口多态传递

public class InterfacePolyPass {
    public static void main(String[] args) {
//        接口类型的变量可以指向实现了这个接口的类的对象实例
        IG ig = new Teacher();
        IH ih = new Teacher();
    }
}

interface IH{
    void ok();
}

interface IG extends IH{}

class Teacher implements IG{
    @Override
    public void ok() {
        
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号