Java多态的优点是什么
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容介绍了"Java多态的优点是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.向上转型。
千家信息网最后更新 2025年01月24日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安全错误
数据库的锁怎样保障安全
天下粮仓数据库
服务器集群管理怎么管理
网络安全需要什么专业知识
网络安全监管员的工作内容
嘉定区工业化软件开发概念设计
江苏省网络安全技能大赛冠军
高新区网络安全和信息化
江西rpa软件开发公司
高质量计算机软件开发管理
前后端用什么数据库实现的
数据库模型按照什么来划分的
计算机网络技术经典实训报告
江西熊猫网络技术有限公司智联招聘
移动软件开发公司什么时候放假
谷歌网络安全公司
美军使用数据库
长春大学网络安全学院在哪
机器视觉软件开发招聘
电影数据库图形表示
桂林探索网络技术有限公司
数据库课设前台设计主要功能
网络安全宣传周时间2019
关于落实网络安全三同步工作要求
怀旧服哪里有高级服务器
网络安全法泄露信息多少条
怎样清理wincc数据库
哪些应用使用了数据库
徐州高防服务器
广州千课互联网科技有限公司
服务器购买价格