了解向上转型,向下转型

一、向上转型

父类子类对象之间的转换分为向上转型和向下转型
向上转型:通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换。(将一个子类类型的对象赋值给一个父类类型的变量)
语法:父类类型 变量 = new 子类类型();

package com.CoderLB;

/**
 * 定义一个抽象类
 */
public abstract class Person {
    //定义一个普通方法
    public void getInfo(){
        System.out.println("这是一个普通的成员方法");
    }
    //定义抽象方法
    public abstract void say();


}

package com.CoderLB;

import java.io.Serializable;
import java.sql.SQLOutput;

public  class Student extends Person {


    @Override
    public void say() {
        System.out.println("我是一个学生");
    }
    //新扩充的方法
    public void readbook(){
        System.out.println("正在读书");
    }
}

package com.CoderLB;

import java.io.Serializable;


public class Worker  extends Person {
    public void removeBrik(){
        System.out.println("我正在搬砖");
    }

    @Override
    public void say() {
        System.out.print("我是一个工人");
    }
}


package com.CoderLB;

import java.util.Scanner;

public class Hi {

    public static void main(String[] args) {
        Person per = new Student();//向上转型
        Person per1=new Worker();
        Student s=(Student) per;//向下转型
        s.readbook();
        //((Student) per).readbook();
        per.say();
        per1.say();

    }
}
//输出
正在读书
我是一个学生
我是一个工人

使用父类类型的变量调用子类覆写父类的方法。具体调用哪个子类覆写的方法,是在运行期间具体复试的子类来确定的。

二、向下转型

不能使用父类类型的变量调用子类新扩充的方法,要使用向下转型,将一个父类类型的变量强制转换为子类类型。
语法:子类类型 变量名=(子类类型)父类类型变量

package com.CoderLB;

import java.util.Scanner;

public class Hi {

    public static void main(String[] args) {
        //Person per = new Student();//向上转型
        Person per = new Worker();
        //向下转型
        if (per instanceof Student) {
            Student s=(Student) per;
            s.readbook();
        }else if(per instanceof Worker){
            Worker w=(Worker) per;
            w.banzhuan();
        }
    }
}

实现向下转型必须先向上转型
向下转型存在类型转换异常的风险ClassCastException。虽然可以使用instanceof关键字来防止异常的出现,但一般不向下转型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值