【Java学习】多态、笔记本USB接口案例

多态

代码中体现多态性,其实就是一句话:父类引用子类对象
格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找

在多态的代码中,成员方法的访问规则
看new是谁,就优先用谁,没有则向上找

口诀:编译看左边,运行看右边

成员变量:编译看左边,运行还看左边
成员方法:编译看左边,运行看右边

 // 父类方法
public class Fu {

    int num = 12;


    public void showNum() {
        System.out.println(num);
    }

    public void method() {
        System.out.println("父类方法");
    }

    public void methodFu() {
        System.out.println("父类特有方法");
    }
}
// 子类方法
public class Zi extends Fu {

    int num = 120;

    int age = 19;

    @Override
    public void showNum() {
        System.out.println(num);
    }

    @Override
    public void method() {
        System.out.println("子类方法");
    }

    public void methodZi() {
        System.out.println("子类特有方法");
    }
}

public class Demo02MultiMethod {
    public static void main(String[] args) {

        Fu obj = new Zi();

        obj.method();
        obj.methodFu();

        // 错误写法,编译看左边,左边是Fu,没有methodZi方法,所有报错
//        obj.methodZi();
    }
}

如何才能知道一个父类的引用对象,本类是什么子类
格式:

对象 instanceof 类名称

这将会得到一个boolean值的结果,也就是判断前面的对象能不能当中后面类型的实例。

向上转型与向下转型

在这里插入图片描述

// 动物抽象类
public abstract class Animal {

    public abstract void eat();

}
// 猫子类
public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

public class Demo01Main {
    public static void main(String[] args) {
        Animal animal = new Cat();

        animal.eat();
        // 向下转型
        Cat cat = (Cat) animal;
        cat.catchMouse();

    }
}

笔记本USB接口案例

// USB抽象接口
public abstract interface USB {
    public abstract void open();

    public abstract void close();
}
// 鼠标子类
public class Mouse implements USB {


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

    @Override
    public void close() {
        System.out.println("关闭鼠标");
    }

    public void click() {
        System.out.println("鼠标点击");
    }
}
  // 键盘子类
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("键盘输入");
    }
}
// 电脑类
public class Computer {

    public void powerOn() {
        System.out.println("笔记本电脑开机");
    }

    public void powerOff() {
        System.out.println("笔记本电脑关机");
    }

    // 使用USB设备的方法,使用接口作为方法的参数
    public void useDevice(USB usb){
        usb.open();  // 打开设备
        if ( usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.click();
        } else if (usb instanceof Keyboard) {
            Keyboard keyboard = (Keyboard) usb;
            keyboard.type();
        }
        usb.close();  // 关闭设备
    }
}
public class DemoMain {
    public static void main(String[] args) {
    	// 创建一个笔记本电脑
        Computer computer = new Computer();
        computer.powerOn();
		// 向上转型
        USB usbMouse = new Mouse();
        computer.useDevice(usbMouse);

        // 创建一个USB键盘
        Keyboard keyboard = new Keyboard();
        computer.useDevice(keyboard);
        computer.powerOff();
    }
}
发布了19 篇原创文章 · 获赞 20 · 访问量 730

猜你喜欢

转载自blog.csdn.net/sy140823/article/details/104686433