文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java基础入门之多态和对象类型转换

2024-12-03 12:53

关注

一、多态

假设实现一个动物发出的叫声方法,我们知道不同的动物,它们的叫声是不一样的。当在方法中传入一个参数类型,例如猫的叫声、狗的叫声。在同一个方法,当参数不同它们的执行结果各不相同,这就是多态。

多态是把子类对象赋给父类引用时,调用重写的方法时,表示的是子类的行为。

怎么实现多态例子

  1. //定义接口Fruit 
  2. interface Fruit{ 
  3.     void info();//定义抽象方法info() 
  4. //定义Cherry类实现Fruit接口 
  5. class Cherry implements Fruit{ 
  6.     double weight=66;//weight属性为重量 
  7.     //实现info()方法 
  8.     public void info(){ 
  9.         System.out.println("我是一个樱桃!"+"重量为:"+weight+"g"); 
  10.   } 
  11. //定义Apple类实现Fruit接口 
  12. class Apple implements Fruit{ 
  13.     double weight=250;//weight属性为重量 
  14.     //实现info()方法 
  15.     public void info(){ 
  16.         System.out.println("我是一个苹果!"+"重量为:"+weight+"g"); 
  17.   } 
  18. public class p30 { 
  19.     public static void main(String[] args) { 
  20.         // TODO Auto-generated method stub 
  21.         Fruit f1=new Cherry();//创建Cherry对象,Fruit类型变量f1引用 
  22.         Fruit f2=new Apple();//创建Apple对象,Fruit类型变量f2引用 
  23.         fruitInfo(f1);//调用fruitInfo()方法,把f1参数传入 
  24.         fruitInfo(f2);//调用fruitInfo()方法,把f2参数传入 
  25.     //定义静态的fruitInfo()方法,接受一个Fruit的参数f 
  26.     public static void fruitInfo(Fruit f){ 
  27.         f.info(); 
  28.   } 

运行的结果是:

  1. 我是一个樱桃!重量为:66.0g 
  2. 我是一个苹果!重量为:250.0g 

我是一个樱桃!重量为:66.0g我是一个苹果!重量为:250.0g

从上面代码中,定义了一个Fruit接口,定义了抽象方法info()。定义Cherry类和Apple类实现Fruit接口,定义变量weight属性和实现info()方法。“Fruit f1=new Cherry()、Fruit f2=new Apple()”实现子类对象赋给父类引用,调用fruitInfo()方法,父类引用了两个子类对象分别传入f1和f2参数。

二、对象类型转换

子类对象是可以自动转换成父类。

父类转换成子类对象就需要强制转换。

例如:

  1. //定义接口Fruit 
  2. interface Fruit{ 
  3.     void info();//定义抽象方法info() 
  4. //定义Cherry类实现Fruit接口 
  5. class Cherry implements Fruit{ 
  6.     double weight=66;//weight属性为重量 
  7.     //实现info()方法 
  8.     public void info(){ 
  9.         System.out.println("我是一个樱桃!"+"重量为:"+weight+"g"); 
  10.     //定义pro()方法 
  11.     void pro(){ 
  12.         System.out.println("产地:浙江"); 
  13.   } 
  14. public class p31 { 
  15.     public static void main(String[] args) { 
  16.         // TODO Auto-generated method stub 
  17.         Fruit f1=new Cherry();//创建Cherry类的实例对象 
  18.         fruitInfo(f1);//调用fruitInfo()方法,把f1参数传入 
  19.     //定义静态方法fruitInfo(),接受一个Fruit参数f 
  20.     public static void fruitInfo(Fruit f){ 
  21.         f.info();//调用传入参数f的info()方法 
  22.         f.pro();//调用传入参数f的pro()方法 
  23.   } 

运行的结果是:

 

从上面可以看出编译出错了,调用fruitInfo()方法传入Cherry对象,方法参数是Fruit类型的,把Cherry的子类当作父类使用导致程序编译出现错误,程序在运行到f.pro()这行代码发现这个方法没有定义。因为传入的是Cherry类,在Cherry类中定义了pro()方法需要强制转换才可以运行,就是把Fruit类型变量强制转换成Cherry类型。

修改后代码如下所示:

  1. //定义静态方法fruitInfo(),接受一个Fruit参数f 
  2.     public static void fruitInfo(Fruit f){ 
  3.         Cherry f1=(Cherry)f; 
  4.         f1.info();//调用传入参数f的info()方法 
  5.         f1.pro();//调用传入参数f的pro()方法 

再次运行的结果是:

  1. 我是一个樱桃!重量为:66.0g 
  2. 产地:浙江 

三、instanceof关键字

instanceof关键字作用

判断一个实例对象是否属于一个类,它的语法如下:

  1. 对象 instanceof 类 

在进行引用类型转换前先使用instanceof关键字判断,例如:

  1. if( f instanceof Cherry){   //如果f指的是Cherry对象类型时,返回的是true。 
  2.     Cherry f1=(Cherry)f; 

四、总结

本文主要介绍了多态、对象类型转换、instanceof关键字。

多态是子类对象赋给父类引用时,调用重写的方法时,表示的是子类的行为。通过怎么实现多态例子帮助理解这个用法。

对象类型转换是子类对象是可以自动转换成父类、父类转换成子类对象就需要强制转换。

 

instanceof关键字用来判断一个实例对象是否属于一个类,希望大家通过本文的学习,对你有所帮助!

 

来源:Java进阶学习交流内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯