向上转型和向下转型的实例

package musical;

public class instrument {
    public void makeSound(){
        System.out.println("乐器可以演奏!");
    }
}

package musical;

public class Erhu extends instrument{
    @Override
    public void makeSound() {
        System.out.println("乐手正在演奏二胡!");
    }
    public  void like(){
        System.out.println("样子像一个弓箭!");
    }
}

package musical;

public class Piano extends  instrument {
    @Override
    public void makeSound() {
        System.out.println("乐手正在演奏钢琴!");
    }
    public  void like(){
        System.out.println("样子像一个机器!");
    }
}

package musical;

public class Violin extends instrument {
    @Override
    public void makeSound() {
        System.out.println("乐手正在演奏小提琴!");
    }
    public  void like(){
        System.out.println("样子像一个葫芦!");
    }
}
package musical;

public class Musician {
    instrument i;
    public Musician(instrument instrument){
        this.i = instrument;
    }
     public void play(){
        i.makeSound();

     }

     public void lookLike(){
        if(i instanceof Erhu){//instance,可以在程序运行
            // 阶段判断某个引用指向的对象是否为某一类型,
            // 向下转型一定要判断类型,这是企业的代码规范。
//            ((Erhu) i).like();
            Erhu erhu = (Erhu)i;
            erhu.like();
        }
        if(i instanceof Violin){
            Violin violin = (Violin) this.i;
            violin.like();
        }
        if (i instanceof Piano){
            Piano piano = (Piano)i;
            piano.like();
        }
     }
}
package musical;

public class Test {
    public static void main(String[] args) {
        //子转父
        instrument i = new Violin();//向上转型(自然转换),可理解为小提琴是一个乐器
        i.makeSound();

        //父转子,向下转型(强制转换),需要子类中有特有的方法时,才可以编译
         instrument ii = new Piano();
         ((Piano)ii).like();
         Piano p = (Piano)ii;
         p.like();

         
        Musician musician = new Musician(new Erhu());
        musician.play();
        musician.lookLike();


    }
}

结果:
在这里插入图片描述
若有问题,请指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值