Java向上转型和向下转型

77 篇文章 12 订阅
69 篇文章 5 订阅


(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/75530403冷血之心的博客)



向上转型:父类引用指向子类对象                             向下转型:子类引用指向父类对象


举例:Father是父类,Son是子类

Father f1 = new Son();   // 这就叫 upcasting (向上转型), 现在f1引用指向一个Son对象

Son s1 = (Son) f1;   // 这就叫 downcasting (向下转型),现在f1还是指向Son对象


举例:Father是父类,Son是子类

Father f2 = new Father();

Son s2 = (Son) f2;       // 编译不出错,运行时出错(除非子类和父类拥有相同的属性和方法),子类引用不能指向父类对象


向上转型:父类引用指向子类对象,将会丢失子类和父类中不一致的方法,并且父类引用调用的变量只能是父类中的。

举例:

class Person{
    private String name = "Person";
    int age=0;
    public void function() {
		System.out.println("this is person");
	}
}
public class Child extends Person{
	
    public String grade;
    int age=10;
    public void function() {
		System.out.println("this is child");
	}
    public void b1(){
    	System.out.println("子类新方法");
    } //B类定义了自己的新方法
    @Test
    public  void test(){
        Person p = new Child();
        p.function();
        System.out.println(p.age);
    	
    }
}

此时将输出:

“this is child”  

0

并且我们是不能使用p.b1()的,编译错误,因为,此时该对象p已经失去了该方法。


向上转型的作用:

这里以父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。

public class Main{  
    
    public static void main(String[] args) {  
        dosleep(new Male());  
        dosleep(new Female());  
    }  
      
    public static void dosleep(Human h) {  
        h.sleep();  
    }  
}  
class Human {  
    public void sleep() {  
        System.out.println("Human sleep..");  
    }  
}  
class Male extends Human {  
    @Override  
    public void sleep() {  
        System.out.println("Male sleep..");  
    }  
}  
class Female extends Human {  
    @Override  
    public void sleep() {  
        System.out.println("Female sleep..");  
    }  
}  

如果dosleep以子类对象为参数,则有多少个子类就需要写多少个函数。这也体现了JAVA的抽象编程思想。




如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~



本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。



  • 27
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔狠角色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值