多态以及父子类方法的调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.qin.niuke; public class TestOverRide { public static void main(String[] args) { Birds birds = new YingWu(); // 多态,向上转型,父类型引用指向子类型对象,实际访问的是子类型的方法 birds.move(); // 执行结果说明,子类【Birds类】可以访问父类【Animals类】的方法【能继承的方法,move()方法】,也可以访问其子类的方法【YingWu类】 // 前提是存在继承关系,而且此处Birds类既充当了Animals的子类,也充当了YingWu的父类 // 那如何访问子类特有的方法呢?也即如何访问Birds类的子类YingWu类的方法moveFly()?? System.out.println( "=========================" ); YingWu yingWu = (YingWu) birds; // 多态,向下转型,强制类型转换。 yingWu.moveFly(); } } class Animals{ public void move(){ System.out.println( "动物在移动!!" ); } } class Birds extends Animals{ @Override public void move() { super .move(); // 这个说明子类能访问父类的方法 System.out.println( "鸟儿在飞!!" ); } } class YingWu extends Birds{ @Override public void move() { super .move(); System.out.println( "鹦鹉在跳舞!!" ); } public void moveFly() { // 这是子类特有的方法 System.out.println( "鹦鹉说话了!!" ); } } |
总结:
/**
*
* @author 莫欺少年穷
* 总结:
* 子类访问父类方法,只要继承来的方法就能通过super.方法访问回去!
* 父类访问子类方法(重写的方法),父类型引用指向子类型对象,向上转型,自动类型转换,实际上访问的就是子类重写父类后的方法!
* 父类访问子类特有的方法,如上,向下转型,强制类型转换。
*/
在java中父类调用子类中的方法
main方法中是可以的,父类是不能调用子类 的方法的。从面向对象上来说吧。
父类先于子类存在,子类从父类中生出来,所以子类知道父类,可以调用父类方法。但父类不知道子类,子类可以任意的出生,只要你愿意,所以父类无法调用子类,他不知他会有这样的子类,也不知有多少个子类,但子类的父类是唯一的。
简单点就是在JAVA中父类是不能直接调用子类的方法的。
实际上调用的是你new的是哪个,就是那个,也就是子类的方法
例如
class B extends A
A a = new B();
b.method()--->实际内存里面运行的是B的对象,所以调用的是子类B的方法
以上的代码案例说明通过多态可以实现父类访问子类方法的功能!!多态的知识
在父类中调用子类的方法可以用接口实现,因为接口是实现了多继承的,一个类中可以实现多个接口而只能继承一个父类。所以可以让父类和子类共同实现一个接口
而子类和父类都可实现这个接口中方法。在子类中的方法自然可以被父类调用到。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?