• 预习笔记 多态 --S2 4.3


    第三章 多态

    polymorphism 多态 instance 例子
    override 重载 constructor 构造器
    ClassCastException 类型转换异常
    upcasting 上抛 downcasting 向下转换
    abstract 抽象

    1.多态 是具有表现多种形态的能力的特征
    同一个实现接口,使用不同的实例而执行不同的操作

    2.子类向父类的转型
    Dog dog=new Dog();
    dog.eat();
    Pet pet=new Dog();
    pet.eat();
    //Dog类继承自Pet类,调用的是子类重写的方法 而不是父类的方法

    将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换.
    此时通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法
    此时通过父类引用变量无法调用子类特有的方法


    3.使用父类方法作为形参实现多态

    //主人类
    public class Master{
    private String name="";
    private int money=0;
    public Master(String name,int money){
    this.name=name;
    this.money=money;
    }

    public void feed(Pet prt){
    pet.eat();
    }
    public void feed(Dog dog){
    dog.eat();
    }
    public void feed(Cat cat){
    cat.eat();
    }
    //...省略代码
    }

    //测试类 领养宠物并喂食
    public class Test{
    public static void main(String[] args){
    Master master=new Master("天命",100);
    Pet pet=new Dog("doge","柴犬");
    }
    }
    优势:减少代码量 提高代码的可扩展性和可维护性


    4.使用父类作为方法返回值实现多态
    //主人类
    public class MasterP{
    private String name="";
    private int money=0;
    public Master(String name,int money){
    this.name=name;
    this.money=money;
    }
    //领养宠物
    public Pet getPet(int petType){
    Pet pet=null;
    if(petType==1){
    pet=new Dog();
    }else if(petType==2){
    pet=new Cat();
    }
    return pet;
    }
    }

    //Main方法
    public class Test{
    public static void main(String[] args){
    int petType=input.NextInt();
    Master m=new Master();
    Pet pet=m.getPet(petType);
    if(pet!=null){
    //.......
    }
    }
    }

    实现多态的三个条件
    继承的存在
    子类重写父类方法
    父类引用变量指向子类对象


    5.父类到子类的转换(向下转型)
    当向上转型发生后,无法调用子类特有的方法
    将一个指向子类对象的父类引用,称为向下转型,此时必须进行强制类型转换

    Dog dog=(Dog)pet;
    dog.CatchBorn();

    6.instanceof 运算符
    向下转型时 如果没有转换为真实子类类型 就会出现类型转换异常
    在强制转换之前通过 instanceof 运算符进行检查对象的真实性
    if(pet instanceof Dog){
    Dog dog=(Dog)pet;

    使用 instanceof 运算符时,对象的类型必须和 instanceof 的第二个参数所指定的类或接口在继承树上有上下级关系,否则会编译报错

    }

  • 相关阅读:
    线程
    开启程序子进程的方式
    multiprocess模块
    计算机网络小知识
    解决粘包问题
    网络编程相关
    反射与元类
    多态相关
    封装相关与接口
    类的继承和组合
  • 原文地址:https://www.cnblogs.com/swordtm/p/5965943.html
Copyright © 2020-2023  润新知