Java学习笔记--向上造型
2017-10-29 12:08
162 查看
首先以下是我对java和c++多态的一点小理解
编译时多态:重载,参数不同的同名函数 (c++一致)运行时多态:覆盖,java默认所有可被继承的函数都是虚函数 (c++中声明为virtual才产生多态,相应的实例会有一张虚表)
多态发生:当基类引用在执行时会动态调用实际类型的函数( c++必须是基类指针或者引用类型)
现在来看问题题:
父类中count初始化为100,子类中200;子类有特有的函数helloworld2;子类覆盖父类helloworld()输出hello world1,父类的输出hello world1. 向上造型,使用父类来引用子类:
public class Base{ int count=100; void hello(){ System.out.print("hello,base"); } } class derived extends Base{ int count=200; void hello(){ System.out.print("hello,derived"); } void hello2(){ System.out.print("hello,hello,derived"); } public static void main(String[] args) { Base base=null; Derived d1= new derived(); System.out.print(d1.count+"\n"); d1.hello(); d1.hello2(); base=d1; System.out.print(base.count+"\n"); base.hello(); //base.hello2(); } }
2. 输出:
200 //子类count,引用时什么类型就输出什么 hello,derived //子类当然调用子类的 hello,hello,derived //子类特有函数 100 //数据总是跟着显式的类型走,是什么类型就输出相应的 hello,derived //多态发生,运行时确定实际类型并调用相应函数 error//base.hello2()报错,使用显式类型没有的函数,编译器通不过。
3.个人理解:
1 多态只发生与覆盖的函数,数据总是跟着显式的类型走 2 当父类引用的对象实际是子类时,就会发生运行 4000 时多态(jvm) 3 但是不应该以父类引用的形式调用子类特有的函数,因为对编译器而言,这是语法错误(会带来危险)
相关文章推荐
- Java面向对象学习笔记 -- 3(继承、向上造型、重写)
- Java学习笔记之多态变量和向上造型
- Java学习笔记-向上转型,向下转型
- Java Upcasting 上溯造型 Downcasting -Java 学习笔记 (17)
- 【学习笔记】转 继承和向上造型详解
- Java_SE_学习笔记_①——Java多态——向上转型的意义
- 我的Thinking in Java学习笔记(七) (zt)
- 我的Thinking in Java学习笔记(四)
- 我的Thinking in Java学习笔记(六)
- java 学习笔记
- 我的Thinking in Java学习笔记(五)
- Java中文处理学习笔记
- 我的Thinking in Java学习笔记(四) (zt)
- 我的Thinking in Java学习笔记(十)
- Thinking in Java学习笔记(2)(zt)
- 我的Thinking in Java学习笔记(八)
- java对象序列化学习笔记(z)
- 我的Thinking in Java学习笔记(三)
- JAVA学习笔记之JIRA
- 我的Thinking in Java学习笔记(六)(zt)