Java多态的优点是什么
发表于:2025-11-20 作者:千家信息网编辑
千家信息网最后更新 2025年11月20日,本篇内容介绍了"Java多态的优点是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.向上转型。
千家信息网最后更新 2025年11月20日Java多态的优点是什么
本篇内容介绍了"Java多态的优点是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
1.向上转型。
之前继承有提到过。父类引用指向子类对象。这时的引用只能调用子类覆盖重写了的方法,不能调用子类特有方法。自动转换
public class Main { public static void main(String[]args) { Father f = new Son(); f.money(); }} class Father{ void money() { System.out.println("父类的钱"); }}class Son extends Father{ void money() { System.out.println("子类的钱"); } void SonPlay() { System.out.println("爸爸我能打游戏吗?"); }}假如我要该引用区调用子类特有的方法(不是覆盖重写)呢? 会报错 (下面的向下转型就是解决这个问题)
下面举个例子
不同语言输出"HelloWorld"
(1)父类为正常类
public class Language{ //编程语言类 void HelloWorld() { //输出HelloWorld }}public class CLanguage extends Language{ //C语言类继承编程语言类 void HelloWorld() { //输出HelloWorld System.out.println("printf("HelloWorld!");"); }}public class JavaLanguage extends Language{ //Java继承编程语言类 void HelloWorld(){ System.out.println("System.out.println("HelloWorld!")"); }}提供一个函数调用
public class Test { public static void main(String[]args) { //inputHelloWorld(new CLanguage()); //inputHelloWorld(new JavaLanguage()); //或者 Language language; language = new CLanguage(); inputHelloWorld(language); language = new JavaLanguage(); inputHelloWorld(language); } public static void inputHelloWorld(Language language) { language.HelloWorld(); }}在不改变函数的形参(父类)下,实参(子类)的改变不会让程序报错。也就是说,我只需要关心的是函数的形参是与Language类相关的类(本身或者子类对象)就行,而无需考虑传入的实参到底是哪个子类对象。
假如父类是接口或者是抽象类呢?也可以
(2)父类为接口
假如父类真的就是为了提供某标准,或者父类无需实现内容等情况,可以考虑吧父类变成接口,接口也支持多态。
public class Test { public static void main(String[]args) { //inputHelloWorld(new CLanguage()); //inputHelloWorld(new JavaLanguage()); //或者 Language language; language = new CLanguage(); inputHelloWorld(language); language = new JavaLanguage(); inputHelloWorld(language); } public static void inputHelloWorld(Language language) { language.HelloWorld(); }} interface Language{ //编程语言类 public void HelloWorld() ; //输出HelloWorld }class CLanguage implements Language{ //C语言类继承编程语言类 public void HelloWorld() { //输出HelloWorld System.out.println("printf("HelloWorld!");"); }}class JavaLanguage implements Language{ public void HelloWorld(){ System.out.println("System.out.println("HelloWorld!")"); }}当然,抽象类作为父类也可以实现多态哦。
2.向下转型。
把父类引用指向子类对象的引用在强转为不同子类对象。 转完之后的对象可以调用子类特有方法
(解决上述的调用子类的特有方法会报错)
public class Main { public static void main(String[]args) { Father f = new Son(); //f.money(); Son s = (Son)f; s.SonPlay(); }} class Father{ void money() { System.out.println("父类的钱"); }}class Son extends Father{ void money() { System.out.println("子类的钱"); } void SonPlay() { System.out.println("爸爸我能打游戏吗?"); }}在举上面的编程语言输出HelloWorld例子,假如我要求inputLanguage方法对于传入的实参中的子类对象进行判断,假如传入的对象是C语言类就输出新增的特有的方法,Java类也是一样
这里就有点像简单工厂模式(实参是啥我new啥)了,这里是实参是啥,我强转之后,我调用对应的方法。
public class CLanguage implements Language{ //C语言类继承编程语言类 public void HelloWorld() { //输出HelloWorld System.out.println("printf("HelloWorld!");"); } public void CReadMe() { //新增C语言子类特有方法 System.out.println("我是C语言"); }}public class JavaLanguage implements Language{ public void HelloWorld(){ System.out.println("System.out.println("HelloWorld!")"); } public void JavaReadMe() {//新增Java子类特有方法 System.out.println("我是Java"); }}修改inputHelloWorld函数
public class Test { public static void main(String[]args) { //inputHelloWorld(new CLanguage()); //inputHelloWorld(new JavaLanguage()); //或者 Language language; language = new CLanguage(); inputHelloWorld(language); language = new JavaLanguage(); inputHelloWorld(language); } public static void inputHelloWorld(Language language) { if(language instanceof CLanguage) { CLanguage clanguage = (CLanguage) language; clanguage.CReadMe(); }else if(language instanceof JavaLanguage) { JavaLanguage javalanguage = (JavaLanguage)language; javalanguage.JavaReadMe(); } language.HelloWorld(); }}"Java多态的优点是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
子类
语言
方法
输出
对象
编程语言
编程
多态
函数
接口
内容
优点
不同
例子
就是
情况
我要
指向
更多
爸爸
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库的数字类型
网络安全当前出现的问题
江苏数据库防护箱服务费
花园战争服务器怎么连
网络电视节目服务器
软件开发 项目经理授权书
北京it软件开发销售价格
网络安全中学生演讲
金塔网络安全宣传
为何还需数据库应用程序
遭遇网络安全事件的措施
信用数据库保存几年
云管端”网络安全管理体系
软件开发成本6
CBM数据库可以提供全文吗
渝中区企业网络技术诚信服务
微信服务器有问题登录不进去
宽城区新时代网络安全答疑解惑
互联网科技与保险
2019年上半年网络安全
ibms数据库有哪些管理功能
杭州极云网络技术有限公司好吗
mc怎么进服务器地址
文件夹里的数据库如何清理
微藻图谱数据库app下载
数据库与安全试卷
犀牛7提示服务器正在运行中
云服务器封一个ip段
惠山区环保软件开发创新服务
武汉ios手机软件开发