zoukankan      html  css  js  c++  java
  • 多态

    1.多态

    多态的理解:

    生活例子

    同一份文档,使用不同的打印机,打印的结果不同

    同一事物,由于条件不同,结果也不同

    程序中:同一引用类型既父类,不同的子类实例,同一方法,不同条件,不同结果。

     1 package cn.sxt05;
     2 
     3 public class Test01 {
     4     public static void main(String[] args) {
     5         
     6         // 多态
     7         // 同一引用类型
     8         Pet pet = null;
     9         // 父类引用 引用 子类对象
    10         pet = new Dog("二狗",100,0,"土狗");
    11         // 呈现多态
    12         pet.eat();
    13         
    14         pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
    15         // 呈现多态
    16         pet.eat();
    17     }
    18 }

    实现多态的步骤

    [1] 编写父类

    [2] 编写子类,子类一定要重写/实现父类的方法

    [3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

     多态的实现形式

    [1] 父类类型 引用 子类对象(本质)

    1 // 多态
    2 // 同一引用类型
    3 Pet pet = null;
    4 // 父类引用 引用 子类对象
    5 pet = new Dog("二狗",100,0,"土狗");
    6 // 呈现多态
    7 pet.eat();

    pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。

    [2] 父类作为方法形参实现多态

    1 public void feed(Pet pet) {
    2         System.out.println(this.getName() + "正在喂" + pet.getName());
    3         pet.eat();
    4     }

    [3] 父类作为方法的返回值实现多态

     1     public Pet adoptPet(int type) {
     2         Pet pet = null;
     3         if(1 == type) {
     4             pet = new Dog();
     5         }else if(2 == type) {
     6             pet = new Penguin();
     7         }else if(3 == type){
     8             pet = new Cat();
     9         }
    10         return pet;
    11     }

     类型转换

    在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。

    在引用数据类型转换过程中,

    自动类型转换也称向上类型转换。子类可以自动转换成父类。

    1 Pet pet = null;
    2 pet = new Dog();

    强制类型转换也称向下类型转换。父类可以强制转换成子类

    子类类型 引用 = (子类)父类对象

    一般而言,需要判断父类对象的真实类型,用instanceof关键字

    obj instanceOf 类/接口 判断obj是否是类/接口的实例

    1 public class TestInstanceOf {
    2     public static void main(String[] args) {
    3         Dog dog = new Dog();
    4         System.out.println(dog instanceof Dog); //true
    5         System.out.println(dog instanceof Pet); //true
    6         System.out.println(dog instanceof Object); //true
    7     }
    8 }

    如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型

    1     public void play(Pet pet) {
    2         if(pet instanceof Dog) {
    3             Dog dog = (Dog) pet;
    4             dog.catchFlyDisc();
    5         }else if(pet instanceof Penguin) {
    6             Penguin penguin = (Penguin) pet;
    7             penguin.swimming();
    8         }
    9     }

     开发工具

    eclipse:www.eclipse.org

    下载地址: https://www.eclipse.org/downloads/packages/

     调试技巧

    step over:  单步调试,一次只执行一行代码

    step into: 进入方法调试

    step return: 返回/结束方法

    :停止调试

      快捷键

    快捷键

    描述

    ctrl+m

    最大化/恢复编辑区

    ctrl + +/-

    放大/缩小字体

    shift+alt+s

    呼出source菜单

    ctrl+alt+向上/

    快速复制代码

    ctrl+2,L

    快速生成本地变量

    alt+向上/

    快速移动代码

    ctrl+1

    快速修复/建议代码

  • 相关阅读:
    MSSQL安全审计文件执行Rootkit-WarSQLKit
    组建自己的局域网服务器
    python openpyxl表格样式设置
    ssh 和 scp 命令访问非默认22端口。
    set | grep IFS
    Python: check if key exists in dictionary (6 Ways)
    在线Jinja2解析器
    FastApi教程|测试WebSockets
    QT Qstring的用法
    QT UI拖拽方法
  • 原文地址:https://www.cnblogs.com/xfbb/p/10759284.html
Copyright © 2011-2022 走看看