Java搞不懂业务_java问题,求大神分析明白啊,实在搞不懂了

楼主可以这么理解:假设有一个父类——人类(Human),两个它的子类男人(Man)和女人(Women)。

public abstract class Human{public abstract void eat();}

public class Man extends Human{public void eat(){} public void luguan(){} }

public class Man extends Human{public void eat(){}}

向上转型比如Human h=new Man();

你这么声明了一个human对象,他是通过man来实例化的

向下转型比如Man m=(Man)h;

你强制一个human对象转化为了man对象

向上转型有什么用呢?每个人类都能吃(eat),但是男人女人吃的不一样多,你通过向上转型声明的一堆人类对象,不管他是男人女人你都能调用他的eat方法,但是具体吃多少也就是eat方法怎么实现可以不同。向上转型还一个作用就是获得接口或者抽象类的实例化对象,你要是用过java的List的话你会知道他是个接口,java接口本身没有构造方法,所以你不能写List l=new List();但是你用他的子类就可以获得一个实例,你可以写List l=new ArrayList();

向下转型有什么用呢?你声明了一个Human对象h,他是用子类Man来实例化的,一般来说对于h你只能调用Human里有的方法而不能调用子类Man有而Human木有的方法。比如你饥渴难耐想要撸管(luguan方法),但是Human里没有luguan这个方法,h.luguan()就会报错。所以你可以强制吧h向下转换成Man类型,((Man)h).luguan()就是对的。向下转型有一定风险,因为有的human对象是用women实例化的如Human w=new Woman(),你把用women类的构造方法实例化的w强制转换为man就不行,因为他不是个爷们,即使你给她打扮的像男人一样他也不具备男人的功能,她无管可撸,所以((Woman)h).luguan()就会报错。

希望我的这个不很恰当的例子能帮助楼主理解这两个概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值