向上转型和向下转型

本文通过代码示例介绍了Java中的向上转型和向下转型。向上转型允许将子类对象赋值给父类引用,而向下转型则用于将父类引用转换为子类对象,以便调用子类特有的方法。示例中展示了Driver类如何根据传入的Vehicle对象类型进行不同的操作。
摘要由CSDN通过智能技术生成

向上转型

package Package;

public abstract class Father {
    public Father(){
        System.out.println("父类构造方法");
    }
    void doAnything(){
        System.out.println("父类方法");
    }
    public static void main(String[] args){
        //向上转型
        Father f=new son();
        f.doAnything();

        f=new son2();
        f.doAnything();
    }
}

package Package;

public class son extends Father {
    public son(){
        System.out.println("子类构造方法");
    }
    void doAnything(){
        System.out.println("子类重写方法");
    }
    void doSomething(){
        System.out.println("子类方法");
    }
}

package Package;

public class son2 extends Father{
    public son2(){
        System.out.println("子类2构造方法");
    }
    void doAnything() {
        System.out.println("子类2重写方法");
    }
    void doSomething1(){
        System.out.println("子类2方法");
    }
}

向下转型

package Package;

public abstract class Vehicle {
    public abstract void Trans();
}

package Package;

public class Car extends Vehicle {
    @Override
    public void Trans() {
        System.out.println("小轿车载人前行");
    }
    public void run(){
        System.out.println("小车在路上开");
    }
}

package Package;

public class Boat extends Vehicle {
    @Override
    public void Trans() {
        System.out.println("小船载人前行");
    }
    public void swin(){
        System.out.println("小船在水上开");
    }
}

package Package;

public class Plane extends Vehicle{
    @Override
    public void Trans() {
        System.out.println("飞机载人前行");
    }
    public void fly(){
        System.out.println("飞机在天上开");
    }
}
package Package;

public class Driver {
    String name;
    public Driver(String name){
        this.name=name;
    }
    //重点
    public void action(Vehicle vehicle){
        if (vehicle instanceof Car){
            Car car=(Car)vehicle;
            car.run();
            car.Trans();
        }else if (vehicle instanceof Boat){
            Boat boat=(Boat)vehicle;
            boat.swin();
            boat.Trans();
        }else if (vehicle instanceof Plane){
            Plane plane=(Plane)vehicle;
            plane.fly();
            plane.Trans();
        }
    }
}

package Package;

public class Test {
    public static void main(String[] args){
    //需要先向上转型
        Vehicle vehicle;
        Driver driver=new Driver("张三");
        vehicle=new Car();
        driver.action(vehicle);

        vehicle=new Boat();
        driver.action(vehicle);

        vehicle=new Plane();
        driver.action(vehicle);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值