Java基础之(九) 对象的转型

1.向上转型

定义:将子类的对象赋值给父类的引用。用法如下:

Student s = new Student();
Person p = s;

或者:

Person p = new Student();

因为在继承树的画法中,父类是放置在上方的。
先看下面程序:

class Person {
      String  name;
      int age;

     void introduce(){
        System.out.println("我的姓名是:" + name+",我的年龄是"+ age);
    }

}
class Student extends Person {

      String address;

      void study(){
          System.out.println("我正在学习");
      }

     void introduce(){
        super.introduce();
        System.out.println("我的家在"+ address);
    }   
}
class Test{
public static void main(String args[]){

    Person p = new Student();
    p.name = "张三";
    p.age = 20;
    p.address = "北京";
    p.introduce();
    }
}
输出结果:
error:找不到符号
符号 :变量address
位置 :类型为Person的变量p
p.address = "北京";

错误的原因是因为:

  • 一个引用能够调用哪些成员(变量和方法),取决于这个引用的类型
    在这个例子中,引用p能够调用哪些成员取决于Person里面的成员。Person类的成员变量只有name和age,因此调用不存在于Person类的成员变量就会出错。
class Test{
public static void main(String args[]){

    Person p = new Student();
    p.name = "张三";
    p.age = 20;
    //p.address = "北京";
    p.introduce();
    }
}

编译运行

输出结果:
我的姓名是:张三,我的年龄是20
我的家在null

从结果来看,我们发现p调用的introduce()方法是子类的introduce()方法。原因是:

  • 一个引用调用的是哪一个方法,取决于这个引用所指向的对象。

在向上转型中,当把一个子类对象直接赋值给一个父类的引用时,例如上面的Person p = new Student(); 这个p引用变量的编译时类型是Person,而运行时类型是Student,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法时呈现出不同的行为特征,这就是多态。

关于多态,以后会有更详细的介绍。

2.向下转型

定义:将父类的对象赋值给子类的引用。用法如下:

Student s1 = new Student();
Person p = s1;
Student s2 = (Student)p;

或者

Person p = new Student();
Student s = (Student)p;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值