版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
向上造型
- 父类的引用指向子类的对象
- 能点出来什么看引用的类型
//动物是动物
Animal o1 = new Animal();
//老虎是老虎
Tiger o2 = new Tiger();
//老虎是动物
Animal o3 = new Tiger(;
//动物是老虎-----错误的
Tiger o4 = new Animal();
父类的引用指向子类的对象
- 一个子类的对象可以向上造型为父类的对象。即:定义父类型的引用可以指向子类的对象
class Foo{
int value;
public void f(){...}
Foo(int value){
this.value = value;
}
}
class Goo extends Foo{
int num;
public void g(){...}
Goo(int value,int num){
super(value);
this.num = num;
}
}
//父类的引用可以指向子类的对象
Foo obj = new GOO(100,3);
- 父类的引用可以指向子类的对象,但通过父类的引用只能访问父类所定义的成员,不能访问子类扩展的部分
class Foo{
int value;
public void f(){...}
... ... ...
}
class Goo extends Foo{
int num;
public void g(){...}
... ... ...
}
Foo obj = new Goo(100,3);
obj.value = 200;
obj.f();
//下面的代码会有编译错误,
//Java编译器会根据引用的类型(Foo),
//而不是引用的类型(Goo)来检查
//调用的方法是否匹配
obj.num = 5;
obj.g();
代码
package oo.day03;
//向上造型的演示
public class UpDemo {
public static void main(String[] args) {
/*
Coo o = new Coo();
o.c = 5;
o.say();
*/
/*
Doo o = new Doo();
o.d = 5;
o.show(); //本类
o.c = 5;
o.say(); //继承过来了,父类
*/
//能点出来什么,看类型
Coo o = new Doo(); //向上造型
o.c = 5;
o.say();
//o.d = 5;
//o.show(); //错误,点不出来
}
}
class Coo{
int c;
void say(){}
}
class Doo extends Coo{
int d;
void show(){}
}