您的位置:首页 > 编程语言 > Java开发

Java学习笔记--向上造型

2017-10-29 12:08 162 查看

首先以下是我对java和c++多态的一点小理解

编译时多态:重载,参数不同的同名函数 (c++一致)

运行时多态:覆盖,java默认所有可被继承的函数都是虚函数 (c++中声明为virtual才产生多态,相应的实例会有一张虚表)

多态发生:当基类引用在执行时会动态调用实际类型的函数( c++必须是基类指针或者引用类型)

现在来看问题题:

父类中count初始化为100,子类中200;子类有特有的函数helloworld2;子类覆盖父类helloworld()输出hello world1,父类的输出hello world

1. 向上造型,使用父类来引用子类:

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 但是不应该以父类引用的形式调用子类特有的函数,因为对编译器而言,这是语法错误(会带来危险)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: