19Java面向对象--------向上造型及其代码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44787898/article/details/102722402

向上造型

  • 父类的引用指向子类的对象
  • 能点出来什么看引用的类型
//动物是动物
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(){}
}

猜你喜欢

转载自blog.csdn.net/qq_44787898/article/details/102722402
今日推荐