java向上转型

向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。

class Animal {
					String name="动物";
         public void run(){
						
                   System.out.println("动物在奔跑.");
         }}

class Dog extends Animal{
					 String name = "狗";
         public void run(){
                   System.out.println("狗在奔跑.");//覆盖父类方法

         }

         public void eat(){

                   System.out.println("狗吃东西.");

         }}
public class C{  
         public static void main(String[] args) {

                   Animal b=new Dog(); //向上转型
									 System.out.println(b.name);
                   b.run();
                 //  b.eat();  //加上错误!此处提示在Animal中没有定义。
                 
}}

输出结果:

             动物
             狗在奔跑.


     Anmial b = new Dog()表示定义了一个Anmial类型的引用,指向新建的Dog类型的对象。由于Dog是继承自它的父类Anmal,所以Anmial类型的引用是可以指向Dog类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特

  定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
  所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,是不能被调用的

         因此b.name调用父类的属性! b.eat方法父类中没有,报错!

     父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

  对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

因此b.run()调用子类的方法!

向上转型都会成功,是安全的。 就像说狗是动物没问题。但通过b若调用 动物 或 狗类中任意方法都报异常,也就是说向下转型可能会出错 不能说动物是狗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值