Java后端笔记4-多态

多态

接口

动物接口
package com.xiye.service;

/**
 * Create by xiye on 2019/11/21 12:08
 */
public interface Animal {
    void eat();
    // 有方法体
    // JDK1.8
    default void sleep(){}
    static void go(){}
    // JDK1.9
    private void show(){}
}

狗实现动物接口
package com.xiye.bean;

import com.xiye.service.Animal;

/**
 * Create by xiye on 2019/11/21 12:17
 */
public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("狗啃骨头!");
    }

    public void lookHome() {
        System.out.println("狗会看家");
    }
}

猫实现动物接口
package com.xiye.bean;

import com.xiye.service.Animal;

/**
 * Create by xiye on 2019/11/21 16:12
 */
public class Cat implements Animal {
    @Override
    public void eat() {
		System.out.println("猫吃鱼!");
    }

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

接口

import com.xiye.bean.Dog;
import com.xiye.service.Animal;

/**
 * Create by xiye on 2019/11/21 12:01
 */
public class Demo1_接口 {
    /*接口:
    * 关键字interface
    *
    * 接口中默认方法修饰符是public abstract
    *
    * 接口中的带有方法体的方法:
    * jdk1.8,接口可以定义有方法体:默认方法是default修饰,静态方法是static
    * jdk1.9还可以在接口中定义private私有方法
    *
    * 默认方法可以被继承使用
    *   dog.eat();
        dog.sleep();
    *
    * 成员变量有默认值,定义时直接赋值变成常量????
    *
    *
    * */

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        // 默认方法可以被继承调用
        dog.sleep();
        // 静态方法只能接口自己调用
        Animal.go();

    }
}

接口

转型

import com.xiye.bean.Cat;
import com.xiye.bean.Dog;
import com.xiye.service.Animal;

/**
 * Create by xiye on 2019/11/21 16:04
 */
public class Demo2_转型 {
    /*
    * 向上转型
    *   自动转型
    * 向下转型
    *   强制转型
    *   例如:父类想要调用子类的特有方法,父类对象必须强转子类类型
    *
    * */
    /*
    * 类型判断
    *   instanceof
    *
    * */

    public static void main(String[] args) {
        // 自动向上转型
        Animal animal = new Dog();
        // 强制向下转型
        Dog dog = (Dog) animal;

        // 类型判断
        if (animal instanceof Dog) {
            Dog d = (Dog) animal;
            d.lookHome();
        }else if (animal instanceof Cat) {
            Cat c = (Cat) animal;
            c.catchMouse();
        }
    }
}

多态
在这里插入图片描述

import com.xiye.bean.Cat;
import com.xiye.bean.Dog;
import com.xiye.service.Animal;

/**
 * Create by xiye on 2019/11/21 16:28
 */
public class Demo3_多态 {
    public static void main(String[] args) {
        method1();

        method2();

    }

    private static void method2() {
        /*
        * 多态的好处就是利用父类作为方法形式参数,不同子类都能作为方法实参进行传递
        *
        * */

        System.out.println("多态作用:作为形参,体现其扩展性:");

        Dog dog = new Dog();
        Cat cat = new Cat();
        
        showAnimal(dog);
        showAnimal(cat);

        System.out.println("~~~~~~~~~~~~~~");
    }

    private static void method1() {
        /*
        * 实现一个类用其父类接口作为对象类型
        *
        * */
        System.out.println("实现一个类用其父类接口作为对象类型:");
        Animal c = new Cat();
        Animal d = new Dog();

        c.eat();
        d.eat();

        System.out.println("~~~~~~~~~~~~~~");
    }

    public static void showAnimal(Animal a) {
        a.eat();
    }
}

多态接口示例

接口USB

package com.xiye.service;

/**
 * Create by xiye on 2019/11/21 17:04
 */
public interface USB {
    void open();
    void close();
}

鼠标

package com.xiye.bean;

import com.xiye.service.USB;

/**
 * Create by xiye on 2019/11/21 17:05
 */
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("点击鼠标");
    }
}

键盘

package com.xiye.bean;

import com.xiye.service.USB;

/**
 * Create by xiye on 2019/11/21 17:05
 */
public class KeyBoard implements USB {
    @Override
    public void open() {
        System.out.println("连接键盘");
    }

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

    public void press() {
        System.out.println("按下键盘");
    }
}

笔记本

package com.xiye.bean;

import com.xiye.service.USB;

/**
 * Create by xiye on 2019/11/21 17:10
 */
public class Laptop {

    public void run() {
        System.out.println("打开笔记本电脑");
    }
    public void stop() {
        System.out.println("关闭笔记本电脑");
    }

    public void useLaptop(USB usb) {
        usb.open();

        if (usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.click();
        }else if (usb instanceof KeyBoard) {
            KeyBoard keyBoard = (KeyBoard) usb;
            keyBoard.press();
        }

        usb.close();
    }
}

测试

import com.xiye.bean.KeyBoard;
import com.xiye.bean.Laptop;
import com.xiye.bean.Mouse;

/**
 * Create by xiye on 2019/11/21 17:03
 */
public class Demo4_示例 {
    public static void main(String[] args) {
        Laptop laptop = new Laptop();
        Mouse mouse = new Mouse();
        KeyBoard keyBoard = new KeyBoard();

        laptop.run();

        laptop.useLaptop(mouse);
        System.out.println("^_^ ~_~ >_<");
        laptop.useLaptop(keyBoard);

        laptop.stop();
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值