会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 133595个问题
JAVA 全系列/第六阶段:项目管理与SSM框架/RBAC实战 17191楼
Python 全系列/第一阶段:Python入门/编程基本概念 17193楼
JAVA 全系列/第一阶段:AI驱动的JAVA编程/飞机大战小项目训练 17195楼

老师,多态的三个必要条件:继承,重写,父类引用执行子类对象。既然可以直接使用子类新建的对象调用重写的 方法,为何需要使用父类引用指向子类对象调用重写方法呢?而且父类引用指向子类对象还存在无法调用子类独有方法的缺陷。

// 测试多态和对象类型转换
public class TestPoly {

    static void animalCry(Animal a){
        a.shout();
    }

    public static void main(String[] args) {

        // 同一类中,static 方法可以调用其他 static 方法
        animalCry(new Cat());   // 以 Cat 对象调用 animalCry 方法

        Animal a1 = new Dog();
        /*注意,向上转型时,子类单独定义的方法会丢失,因此 a1 无法访问到 Dog 中的 seeDoor 方法。对于 Cat 类同理。*/
        a1.shout();
        animalCry(a1);   // a1 是编译时类型,Dog 才是运行时类型。

        

        Animal a01 = new Animal();
        a01.shout();

        Dog d01 = new Dog();
        d01.shout();
        d01.seeDoor();

        Cat c01= new Cat();
        c01.shout();
        c01.catchMouse();

    }
}


class Animal {
    public void shout(){
        System.out.println("动物叫了一声!");
    }
}

class Dog extends Animal {

    // 重写父类方法
    public void shout() {
        System.out.println("狗子汪汪汪!");
    }

    public void seeDoor() {
        System.out.println("乖乖看门");
    }
}

class Cat extends Animal {

    public void shout(){
        System.out.println("猫咪喵喵喵!");
    }

    public void catchMouse() {
        System.out.println("猫抓耗子");
    }

}


JAVA 全系列/第一阶段:AI驱动的JAVA编程/面向对象详解和JVM底层内存分析 17198楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 17199楼
JAVA 全系列/第六阶段:项目管理与SSM框架/SpringMVC 17200楼
Python 全系列/第七阶段:生产环境部署与协同开发/Git 17202楼

https://github.com/graphql-python/graphene

image.png

lao老师,网站上不了?是不是挂了??

Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/GraphQL 17203楼
Python 全系列/第二阶段:Python 深入与提高/坦克大战 17204楼
Python 全系列/第六阶段:数据库与AI协同技术实战/mysql介绍与环境安装 17205楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637