java 向上转型向下转型

1.名词解释

  • 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
  • 向下转型:父类引用的对象转换为子类类型称为向下转型。

先看两个类:

//Fahther类
class Father
{
     public  void out()
    {
        System.out.println("father");
    }
}

//Son类,继承自Father
class Son extends Father
{
    public   void out()
    {
        System.out.println("son");
    }
    public   void out2()
    {
        System.out.println("son2");
    }
}

2.向上转型

向上转型示例:
Father father=new Son();//定义了一个Father的变量,实际上却赋值了一个Son类型

2.1 向上转型的时候,会遗失子类独有的方法,根据以上两个类,Son类转型成为Father类的时候,Son类的“out2”方法会遗失。也就说以下写法会报错:

Father father=new Son();
father.out2();//会报错

2.2 向上转型的对象可以调用父类拥有的方法,具体执行的是子类原本的代码块

Father father=new Son();
father.out();//因为father变量引用的本质还是new Son,所以father.out()会执行Son类的out()代码块.

3.向下转型

顾名思义,向下转型就是:Father -> Son
但是,有条件。

Father father = new Father();
Son son=(Father)father;//这是不允许的

以上代码就是不被允许的,因为:只有本质是子类的类型才能被向下转型
以上代码中,father本质是new Father()。

只有被向上转型过的子类,才能执行向下转型

Father father=new Son();
Son son=(Son) father;//这是可行的,因为father变量引用的是new Son(),它本质上是一个Son类的对象

4.代码示例

package com.ycty;

public class ClassTest {

    public static void main(String[] args)
    {
        Father father=new Father();
        Son son=new Son();
        father.out();
        son.out();

        //向上转型
        father=new Son();
        father.out();//实际执行的是Son重写的方法

        //向下转型
        son=(Son)father;
        son.out();

        father =new Father();
        son=(Son)father;
    }
}

/**
 * 
 * Father类
 *
 */
class Father
{
     public  void out()
    {
        System.out.println("father");
    }
}
/**
 * 
 * Son类
 *
 */
class Son extends Father
{
    public   void out()
    {
        System.out.println("son");
    }
    public   void out2()
    {
        System.out.println("son2");
    }
}

输出:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值