zoukankan      html  css  js  c++  java
  • 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();
        }
     }

    运行结果:

     

  • 相关阅读:
    进程和线程
    分治算法
    MySQL-IN和Exists区别
    Java-悲观锁和乐观锁
    Spring如何解析Dubbo标签
    Java平台标准版本
    java常用的框架
    状态码
    算法
    java.c++.c#.c的区别
  • 原文地址:https://www.cnblogs.com/focuslife/p/13162682.html
Copyright © 2011-2022 走看看