Day10——接口、多态

1.接口

定义接口:

package case1;

public interface Operation {
    public static final int x = 0;

    int sum(int a, int b);
    default void defaultMethod() {
        System.out.println("Jdk8后default修饰的接口可以有方法体");
    }
    static void staticMethod() {
        System.out.println("Jdk8后static修饰的接口可以有方法体");
    }
   /* private void privateMethod() {
        System.out.println("Jdk9之后private修饰的接口可以有方法体");
    }*/
}

定义实现类:

package case1;

public class OperationImplement implements Operation {

    @Override
    public int sum(int a, int b) {
        return a+b;
    }

    @Override
    public void defaultMethod() {
        Operation.super.defaultMethod();
        System.out.println("接口实现类的实现默认修饰方法方法");
    }
    public void staticMethod() {
        Operation.staticMethod();
        System.out.println("接口实现类实现静态修饰方法");
    }
}

定义测试类:

package case1;

public class Test {
    public static void main(String[] args) {
        OperationImplement o = new OperationImplement();
        int a = o.sum(10, 20);
        System.out.println(a);
        o.defaultMethod();
        o.staticMethod();


    }
}

2.多态

多态体现的格式:

父类类型 变量名 = new 子类对象;
变量名.方法名();

注意 :当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行 的是子类重写后方法。

定义抽象类Animal:

package case3;

public abstract class Animal {
    abstract void eat();
}

 定义实现类dog和cat:

package case3;

public class cat extends Animal {
    @Override
    void eat() {
        System.out.println("猫吃鱼");
    }
    public void catchMouse() {
        System.out.println("猫抓耗子");

    }
}

 

package case3;
public class dog extends Animal{

    @Override
    void eat() {
        System.out.println("狗吃骨头");
    }
    public void watchHouse() {
        System.out.println("狗看家");
    }
}

 定义测试类:

package case3;
public class Test {
    public static void main(String[] args) {
        Animal a = new cat();
        a.eat();
        cat c=(cat) a;
        c.catchMouse();
        ((cat) a).catchMouse();
        Animal b = new dog();
        b.eat();
       /* dog d=(dog) a;
        d.eat();*/
    }
}

 

 

3.引用类型转换

例: 笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备 的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。 定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键 盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。

案例分析 进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘

USB接口,包含开启功能、关闭功能

笔记本类,包含运行功能、关机功能、使用USB设备功能

鼠标类,要实现USB接口,并具备点击的方法

键盘类,要实现USB接口,具备敲击的方法

①定义USB接口

package case6;

public interface USB {
    void open();
    void close();
}

②定义KeyBoard键盘类

package case6;

public class KeyBoard implements USB {
    @Override
    public void open() {
        System.out.println("键盘接通");
    }
    @Override
    public void close() {
        System.out.println("键盘断开");
    }
    public void type() {
        System.out.println("键盘打字");
    }
}

③定义Mouse鼠标类

package case6;
public class Mousse implements USB {

    @Override
    public void open() {
        System.out.println("鼠标接通");
    }

    @Override
    public void close() {
        System.out.println("鼠标断开");
    }
    public void click() {
        System.out.println("鼠标点击");
    }
}

④定义笔记本类Laptop

package case6;

public class Laptop {
    public void run() {
        System.out.println("电脑运行");
    }
    public void Useusb(USB usb) {
        if (usb != null) {
            usb.open();
            if (usb instanceof Mousse) {
                Mousse m = (Mousse) usb;
                m.click();
            } else if (usb instanceof KeyBoard) {
                KeyBoard k = (KeyBoard) usb;
                k.type();
            }
            usb.close();
        }
    }
    public void shoutdown() {
        System.out.println("电脑关闭");
    }
}

⑤定义Test测试类

 

package case6;

public class Test {
    public static void main(String[] args) {
        Laptop laptop = new Laptop();
        laptop.run();
        USB u = new KeyBoard();
        laptop.Useusb(u);
        USB u1 = new Mousse();
        laptop.Useusb(u1);
        laptop.shoutdown();
    }


}

tips: 为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式 如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值