关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型
来源:互联网 发布:微软云计算认证考试 编辑:程序博客网 时间:2024/04/29 10:02
首先什么是向上转型?
向上转型是JAVA中的一种调用方式,是多态的一种表现。向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B复写A的方法,其它的方法都不能访问,包括A中的私有成员方法。
我们举个例子,看下面的代码:
class Animal{ public void sleep(){ System.out.println("Animal sleep"); } public void eat() { System.out.println("Animal eat"); }}class Dog extends Animal { public void eat() { System.out.println("dog eat meat");//重写父类方法 } //子类定义了自己的新方法 public void methods() { System.out.println("dog method"); }}public class Demo { public static void main(String[] args) { Animal a = new Dog(); a.sleep(); a.eat(); //a.methods();/*报错:The method methods() is undefined for the type Animal*/ }}
1、a实际上指向的是一个子类对象,所以可以访问Dog类从Animal类继承的方法sleep()和重写的方法eat()
2、由于向上转型,a对象会遗失和父类不同的方法,如methods();
所以答案就很明显了:
Animal sleep
dog eat meat
现在你再想想如果是B a = new B();的话是怎么样的情况?(这个问题不难,我就不再啰嗦了)
这样理解下来相信你已经大致知道他们的区别了。
现在我们来研究一下多态中的成员访问特点,看下面的代码
class Fu {public int num = 100;public void show() {System.out.println("show Fu");}public static void function() {System.out.println("function Fu");}}class Zi extends Fu {public int num = 1000;public int num2 = 200;public void show() {System.out.println("show Zi");}public void method() {System.out.println("method zi");}public static void function() {System.out.println("function Zi");}}public class DuoTaiDemo {public static void main(String[] args) {// 要有父类引用指向子类对象。// 父 f = new 子();Fu f = new Zi();System.out.println(f.num);// 找不到符号// System.out.println(f.num2);f.show();// 找不到符号// f.method();f.function();}}
答案是:
100
show Zi
function Fu
我们可以看到多态中的成员访问特点:
- 成员变量
- 编译看左边,运行看左边
- 构造方法
- 子类的构造都会默认访问父类构造
- 成员方法
- 编译看左边,运行看右边
- 静态方法
- 编译看左边,运行看左边
- 所以静态方法不能算方法的重写
最后为什么我们要用到向上转型?
阅读全文
0 0
- 关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型
- 指向子类对象的父类引用(向上转型)
- A b=new B()子类的向上转型
- Java父类引用指向子类对象的简单理解
- 父类引用指向子类对象的理解
- 关于父类引用指向子类对象
- 关于“父类引用指向子类对象”
- 关于dao设计模式,父类对象实例化指向子类,xxxDao xxx = new xxxDaoImpl的理解
- java对象转型(casting)-父类引用指向子类对象注意点
- 关于父类引用指向子类对象的那些事
- 父类的引用指向子类对象
- 多态的理解(父类引用指向子类对象)
- 多态的理解(父类引用指向子类对象)
- (java)对象引用向上转型后,无法调用子类独有的方法和属性问题
- Java 中深层理解父类引用指向子类对象
- C#怎么理解“父类引用指向子类对象”
- java多态,如何理解父类引用指向子类对象
- Java 中深层理解父类引用指向子类对象
- html页面格式化输出js对象
- sqlite查看所有表名及字段名,及判断是否存在的方法
- cocos2dx mac eclipse打Android包
- MATLAB和c#混合编程实现心电图显示软件
- Spring IOC 和 AOP
- 关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型
- vue环境的搭建
- 小翼机器人正式上线啦
- js高级脚本算法
- 动态统计每个日期过去30天的数据
- 统计学习方法简介
- WebRTC 中的 SDP 协议
- 使用jvisualvm远程监控JVM
- JAVA 函数、类 day6