多态/区分 对象类型转换(向上转型vs向下转型)

区分

  • 向上转换:子类到父类转换;失去子类特有的方法,向上变成父类
  • 向下转换:父类到子类转换;拥有子类特有的方法,向下变成子类

举例多好用:向上转型-多态

class Pet{
    public void eat(){}
}

class Dog extends Pet{
    @Override
    public void eat() {
        System.out.println("狗狗吃骨头");
    }
}
class Cat extends Pet{
    @Override
    public void eat() {
        System.out.println("喵喵吃鱼干");
    }
}
/**
 * 主人,写个喂不同宠物的方法,这里用多态/向上转型有多方便
 */
class Master{
    public void feed(Pet p){
        p.eat();
    }
}
public class Demo0609 {
    public static void main(String[] args) {
        Pet d = new Dog();
        Pet c = new Cat();
        Master m = new Master();
        m.feed(d);
        m.feed(c);
    }
}

举例多好用:向下转型-强制类型转换

package www.csdn.p0209;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;

/**
 * 新建接口Electronics
 */
interface Electronics{

}
/**
 * 新建电脑类Thinkpad,实现Electronics接口
 */
class Thinkpad implements Electronics{
    public void boot(){
        System.out.println("using Thinkpad");
    }
}
/**
 * 新建鼠标类Mouse,实现Electronics接口
 */
class Mouse implements Electronics{
    public void move(){
        System.out.println("move the mouse");
    }
}
/**
 * 新建键盘类Keyboard类,实现Electronics接口
 */
class Keyboard implements Electronics {
    public void input(){
        System.out.println("using Keyboard input");
    }
}
/**
 * 新建购物车类ShopCart
 */
class ShopCart{
    /** mlist集合,存放电子产品
     * List<Electronics>用了范型知识
     */
    private List<Electronics> mlist = new ArrayList<Electronics>();
    /** add方法,添加电子产品到购物车
     * add将子类实例传进来存放,涉及向上转型,丢掉了子类特有的方法,
     * 例如Thinkpad丢掉了boot(),Mouse丢掉了move(),Keyboard丢掉了input()
     */
    public void add(Electronics electronics){
        mlist.add(electronics);
    }
    /** getSize方法,获取电子产品数量*/
    public int getSize(){
        return mlist.size();
    }
    /** getListItem方法,获取相应电子产品*/
    public Electronics getListItem(int position){
        return mlist.get(position);
    }
}
public class Demo0209 {
    public static void main(String[] args) {
        final int THINKPAD =0;
        final int MOUSE =1;
        final int KEYBOARD =2;
        ShopCart car = new ShopCart();
        car.add(new Thinkpad());
        car.add(new Mouse());
        car.add(new Keyboard());
        System.out.println("购物车里电子产品数:"+car.getSize());
        //取出来电脑,测试
        //向下转型,让类实例重新获得了丢失的方法
        Thinkpad thinkpad = (Thinkpad) car.getListItem(THINKPAD);
        thinkpad.boot();
        System.out.println("------------");
        //取出来鼠标,测试,略
        //取出来键盘,测试,略
    }
}

以上例子来自Java向下转型的意义
注意:“需要把多种类型的实例对象,全都扔到一个集合”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值