Java多态学习笔记

java多态学习笔记

概述

多态的格式与使用

/*

代码中体现多态性:父类引用指向子类对象。

*/

格式:

父类名称 对象名 = new 子类名称();

或者

接口名称 对象名 = new 实现类名称();

成员变量的使用特点

1.直接通过对象名访问成员变量:看等号左边是谁,优先用谁,没有则向上找

2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找

ps:(永远不会向下查找)

口诀:编译看左边,运行还看左边。

成员方法的使用特点

/*

在多态的代码中,成员方法的访问规则是:

看new的是谁,就优先用谁,没有则向上找。

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

使用多态的好处

对象的向上转型

 public class DemoTest {
     public static void main(String[] args) {
         Animal animal = new Cat();
         animal.eat();
         Cat cat = (Cat)animal;
         cat.catchMouse();
      }
 }

对象的向下转型

 

 

用instanceof关键字进行判断

/*

如何才能知道一个父类引动的对象,本来是什么子类?

格式:

对象 instanceof 类名称

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

*/

 public class DemoTest {
     public static void main(String[] args) {
         Animal animal = new Cat();
         animal.eat();
         giveMePet(animal);
    }
     public static void giveMePet(Animal animal){
         if(animal instanceof Cat){
             Cat cat = (Cat)animal;
             cat.catchMouse();
        }
         if(animal instanceof Dog){
             Dog dog = (Dog)animal;
             dog.catchEnmy();
        }
    }
 }

笔记本电脑

笔记本电脑(laptop) 通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。

定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守。USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。


案例分析:

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

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

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

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

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

1592543845220

定义usb接口:

 public interface usb {
     void open();//开启功能
     void close();//关闭功能
 }

定义鼠标类:

 public class Mouse implements usb{
     @Override
     public void open() {
         System.out.println("鼠标开启");
    }
 
     public void click(){
         System.out.println("鼠标点击");
    }
     @Override
     public void close() {
         System.out.println("关闭鼠标");
    }
 }

定义键盘类:

 public class KeyBoard implements usb{
     @Override
     public void open() {
         System.out.println("键盘已成功连接");
    }
 
     public void type(){
         System.out.println("coding");
    }
     @Override
     public void close() {
         System.out.println("键盘断开连接");
    }
 
 }

定义笔记本类(usb接口只能定义抽象方法,需要笔记本类来进行向下转型判断):

 public class Laptop {
     public void run() {
         System.out.println("笔记本开始运行");
    }
 
     //笔记本使用usb设备,这时当笔记本调用这个功能时,必须给其传递一个符合usb规则得usb设备
     public void useUSB(usb usb) {
         //判断是否有usb设备
         if (usb != null) {
             usb.open();
             if (usb instanceof Mouse) {
                 Mouse m = (Mouse) usb;
                 m.click();
            } else if (usb instanceof KeyBoard) {
                 KeyBoard k = (KeyBoard) usb;
                 k.type();
            }
             usb.close();
        }
    }
     public void shutdown(){
         System.out.println("电脑关机!");
    }
 }
 

测试类:

 public class MainTest {
     public static void main(String[] args) {
         Laptop laptop = new Laptop();
         laptop.run();
 
         //创建鼠标对象,并使用鼠标
         usb u = new Mouse();//使用多态写法
         laptop.useUSB(u);
 
         //创建键盘对象,并使用键盘
         KeyBoard keyBoard = new KeyBoard();//直接创建对象
         laptop.useUSB(keyBoard);//类似于int->double
         //laptop.useUSB(new KeyBoard());//使用匿名类
 
         laptop.shutdown();
    }
 }

运行结果:

 

 

 

 

 

posted @ 2020-06-19 13:59  雷神宙斯  阅读(183)  评论(0编辑  收藏  举报