0905 Java中多态的向上转型和向下转型
来源:互联网 发布:前端软件外包交易平台 编辑:程序博客网 时间:2024/06/09 22:00
Java中的多态向上转型和向下转型
目录
- Java中的多态向上转型和向下转型
- 目录
- 多态的向上转型和向下转型
- 定义
- 代码块
- 答案
- 多态的好处和弊端
- 好处和弊端
- 内存结构图
- 多态的代码示例
- 多态内存结构图
多态的向上转型和向下转型
定义
多态的弊端: 不能使用子类的特有功能。我就想使用子类的特有功能?行不行? 行。怎么用呢? A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了) B:把父类的引用强制转换为子类的引用。(向下转型)对象间的转型问题: 向上转型: Fu f = new Zi(); 向下转型: Zi z = (Zi)f; //要求该f 多态分两种:
(1) 编译时多态(设计时多态):方法重载。
(2) 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态)
代码块
class Fu { int age=40; public void show() { System.out.println("show fu"); }}class Zi extends Fu { int age=20; public void show() { System.out.println("show zi"); } public void method() { System.out.println("method zi"); }}class DuoTaiDemo4 { public static void main(String[] args) { //测试 Fu f = new Zi(); //向上转型 f.show(); //成员方法看右边 System.out.println(+(f.age)); //成员变量看左边,打印 //f.method(); //创建子类对象 //Zi z = new Zi(); //z.show(); //z.method(); //你能够把子的对象赋值给父亲,那么我能不能把父的引用赋值给子的引用呢? //如果可以,但是如下 Zi z = (Zi)f; //向下转型 z.show(); z.method(); }}
答案
show zi
show zi
method zi
多态的好处和弊端
好处和弊端
多态的好处
提高了程序的维护性(由继承保证)
提高了程序的扩展性(由多态保证)<可以使代码非常的简洁>
多态的弊端
不能访问子类特有功能
那么我们如何才能访问子类的特有功能呢?
内存结构图
多态的代码示例
class Animal { public void eat(){ System.out.println("Animal eat"); }}class Dog extends Animal { public void eat() { System.out.println("Dog eat"); } public void lookDoor() { System.out.println("Dog lookDoor"); }}class Cat extends Animal { public void eat() { System.out.println("Cat eat"); } public void playGame() { System.out.println("Cat Playgame"); }}class DuoTaiDemo5 { public static void main(String[] args) { //内存中的是狗 Animal a = new Dog(); //向上转型 a.eat(); Dog d = (Dog)a; //向下转型 d.eat(); d.lookDoor(); //内存中是猫 a = new Cat(); //a指向了猫 a.eat();// a.playGame(); Cat c = (Cat)a; //内存中是猫 Dog dd = (Dog)a; //ClassCastException 猫不能变成狗 }}
多态内存结构图
0 0
- 0905 Java中多态的向上转型和向下转型
- Java的向上转型和向下转型
- Java的向上转型和向下转型
- Java的【向上转型】和【向下转型】
- java的向上转型和向下转型
- java中多态的实现以及向上转型和向下转型
- java 向上转型和向下转型
- java 向上转型和向下转型
- Java 向上转型和向下转型
- java向上转型和向下转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- java中的向下转型和向上转型
- Java 向上转型和向下转型
- java向上转型和向下转型
- java向上转型和向下转型
- Java 向上转型和向下转型
- C++每日一练(异常)
- 采用循环队列或链队列实现病人看病的模拟程序
- 用U盘centos的注意事项
- MySQL优化之varchar与char选择
- 自考-C++—第六章继承和派生
- 0905 Java中多态的向上转型和向下转型
- 给TextView加上多彩效果:改变部分字体的大小和颜色
- c++::让你足够了解构造函数和this指针
- 栈的压入、弹出序列
- 大数据Spark “蘑菇云”行动第61课: 广告点击系统时间管理和数据库分层
- Matlab的数据操作
- Android 在Fragment中对Menu的操作
- PHP魔术常量常量(预定义常量)
- Android Parcelable和Serializable的区别