当前位置: 首页 > news >正文

Android java基础_多态性

一.Android Java基础_多态性

向上转换:只能定义被子类覆写的方法,不能调用在子类中定义的方法。

class Father {private int money;	public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv {public static void main (String args[]) {Son son = new Son();Daughter daughter = new Daughter();Father f = son; /*  */f.printInfo();//f.playGame();f = daughter;f.printInfo();}
}

运行结果:

root@ubuntu:/home/topeet/guyilian# javac Cnv.java 
root@ubuntu:/home/topeet/guyilian# java Cnv
This is son
This is daughter

JAVA向下转换的例子,在进行对象的向下转换前,必须首先发生对象的向上转换.否则会编译不过

class Father {private int money;	public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv2 {public static void main (String args[]) {Father f = new Son();Son son = (Son)f;   /* Son son = new Son(); */}
}

运行结果:

root@ubuntu:/home/topeet/guyilian# javac Cnv2.java 
root@ubuntu:/home/topeet/guyilian# java Cnv2

看一下,下面的例子,假如有一千个类继承了father这个类,如果我们要打印他们的信息,那样我们岂不是要写1千个print函数,下面的第二个代码则通过向上转换这个技巧实现.

class Father {private int money;	public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv3 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}public static void print(Son s) {s.printInfo();}public static void print(Daughter d) {d.printInfo();}}

运行结果:

root@ubuntu:/home/topeet/guyilian# javac Cnv3.java 
root@ubuntu:/home/topeet/guyilian# java Cnv3
This is Father
This is son
This is daughter

通过向上转换实现:

class Father {private int money;	public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}}public class Cnv4 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();print(f);print(s);print(d);}public static void print(Father f) {f.printInfo();}}

运行结果:

root@ubuntu:/home/topeet/guyilian# javac Cnv4.java 
root@ubuntu:/home/topeet/guyilian# java Cnv4
This is Father
This is son
This is daughter

instanceof: 用来判断一个对象是不是某个类的实例

class Father {private int money;	public int getMoney() {return money; }public void setMoney(int money) {this.money = money; }public void printInfo() {System.out.println("This is Father");}public void drink() {System.out.println("drink ...");}}class Son extends Father{public void printInfo() {System.out.println("This is son");}public void playGame() {System.out.println("playGame ...");}}class Daughter extends Father{public void printInfo() {System.out.println("This is daughter");}public void dance() {System.out.println("dance ...");}}public class Cnv5 {public static void main (String args[]) {Father f = new Father();Son s = new Son();Daughter d = new Daughter();printAction(f);printAction(s);printAction(d);}public static void printAction(Father f) {if (f instanceof Son) {Son son = (Son)f;son.playGame();}else if (f instanceof Daughter) {Daughter d = (Daughter)f;d.dance();}else if (f instanceof Father) {f.drink();}}
}

运行结果:

root@ubuntu:/home/topeet/guyilian# javac Cnv5.java 
root@ubuntu:/home/topeet/guyilian# java Cnv5
drink ...
playGame ...
dance ...

相关文章:

  • [ubuntu]split命令分割文件
  • Swift 初见
  • MQTT的学习与应用
  • rtt设备io框架面向对象学习-dac设备
  • Unity下使用Sqlite
  • 开发自定义标记应用程序
  • 2024年远控软件年度盘点:安全、稳定、功能之选
  • 柚见(伙伴匹配系统)第三期
  • 动态水印怎么加 怎么去除动态水印 视频剪辑软件 会声会影安激活序列号 会声会影怎么剪辑视频
  • 2024beginCTF-Crypto 复现
  • linuxqq关闭主面板后无法再次打开的问题
  • 五.实战软件部署 4-5MYSQL 5.7版本在ubuntu(WSL环境)安装MYSQL 8.0版本在ubuntu(WSL环境)安装
  • LeetCode、901. 股票价格跨度【中等,单调栈】
  • ubuntu22.04@laptop OpenCV Get Started: 004_cropping_image
  • MySQL数据库⑨_事务(四个属性+回滚提交+隔离级别+MVCC)
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker下部署自己的LNMP工作环境
  • DOM的那些事
  • Redux 中间件分析
  • SQL 难点解决:记录的引用
  • sublime配置文件
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 高度不固定时垂直居中
  • 坑!为什么View.startAnimation不起作用?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 中文输入法与React文本输入框的问题与解决方案
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十八)SpringBoot之发送QQ邮件
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)认识微服务
  • (转)IOS中获取各种文件的目录路径的方法
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net Core与存储过程(一)
  • .Net 高效开发之不可错过的实用工具
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • ?
  • @WebService和@WebMethod注解的用法
  • @我的前任是个极品 微博分析
  • [ACTF2020 新生赛]Upload 1
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [CF494C]Helping People
  • [dts]Device Tree机制
  • [EFI]ASUS EX-B365M-V5 Gold G5400 CPU电脑 Hackintosh 黑苹果引导文件
  • [Excel VBA]单元格区域引用方式的小结