zoukankan      html  css  js  c++  java
  • 多态--强转--多态方法返回值类型

    package duotai;

    public class Animal {
    int age;

    public void eat() {
    System.out.println("吃饭");
    }

    public void sleep() {
    System.out.println("睡觉");
    }
    }

    ----------狗狗类--------

    package duotai;

    public class Dog extends Animal {

    @Override
    public void eat() {
    System.out.println("吃肉");

    }

    public void guard() {
    System.out.println("狗狗看门");
    }

    }

    ---------猫类---------

    package duotai;

    public class Cat extends Animal {

    }

    ------------多态-----------------

    package duotai;

    /*
    * 多态
    */
    public class Test01 {
    public static void main(String[] args) {
    Dog dog = new Dog();
    // 父类引用指向子类对象
    Animal a = new Dog();
    a.eat();
    a.sleep();
    }
    }

    -------------强制类型转换--------两个类之间必须要有继承关系-----------

    package duotai;

    /*
    * 强制类型转换
    *两个类之间必须要有继承关系
    */
    public class Test02 {
    public static void main(String[] args) {
    Animal a = new Dog();
    // 因为Animal中没有guard方法,所以不能直接调用
    // 想要调用子类特有的方法的时候,需要进行强制类型转换
    // 从大类型转向小类型的时候也叫作向下转型
    Dog dog = (Dog) a;

    dog.guard();
    // 编译没有问题,但是在运行的时候会报出ClassCastException
    // 类转型错误
    // 可以通过instanceof关键字判断当前对象是否属于一个类型
    // a-->桌子上的水果 Cat--->相当于你心中的苹果
    if (a instanceof Dog) {
    Dog dog2 = (Dog) a;
    System.out.println("一样");
    } else {
    System.out.println("不一样");
    }
    if (a instanceof Cat) {
    Cat cat = (Cat) a;
    System.out.println("一样");
    } else {
    System.out.println("不一样");
    }
    }
    }

    --------------使用多态作为方法的返回值类型--------------

    package duotai;

    /*
    * 使用多态作为方法的返回值类型
    */
    public class Test03 {
    public static void main(String[] args) {
    Animal animal = getname(0);
    animal.eat();
    if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.guard();
    }
    }

    // 根据传入的数据来判断创建哪个动物的对象
    // 通用
    private static Animal getname(int i) {
    if (i == 0) {
    return new Dog();
    } else {
    return new Cat();
    }

    }
    }

  • 相关阅读:
    QT实现软件重启
    Qt 延时
    gcc 创建库及使用
    verilog 奇数分频设计
    内核中的 likely() 与 unlikely()
    TFT LCD 参数详解
    手动安装m4, autoconf, automake, libtool
    [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:
    Origin9.1如何绘制风向玫瑰图(Binned Data)?
    Origin9.1如何使用原始数据(Raw Data)绘制风向玫瑰图
  • 原文地址:https://www.cnblogs.com/Koma-vv/p/9561544.html
Copyright © 2011-2022 走看看