java中向上转型

上转型对象的特征:

(1)上转型队形不能操作子类新增的成员字段和成员方法。

(2)上转型对象能使用父类被继承或重写的成员方法,被继承或隐藏的成员变量。

(3)如果子类重写了父类的方法,则上转型对象掉用该方法时一定是重写后的方法(多态性)。

(4)如果子类重新定义了父类的同名字段,则上转型对象访问该字段时必定是父类本身的字段,而不是子类定义的字段。

如下的例子:

//测试子类对象的上转型对象以及还原后的子类对象

class Human4{

private String name;

public static final String typeName="人类";

public Human4(String name){

this.name=name;

}

protected String getName(){

return name;

}

public void think(){

System.out.println(name+"在思考..");

}

public String like(){

return"爱好因人而异";

}

}

class Pupil4 extends Human4{

private String stuNo;

public static final String typeName="学生类";

public Pupil4(String stuNo,String name){

super(name);

this.stuNo=stuNo;

}

public String like(){

return stuNo+"号"+getName()+"爱好文娱体育运动";

}

public void learn(){

System.out.println(stuNo+"号"+getName()+"扎起学习中...");

}

}

public class Cfb{

public static void main(String[] args){

System.out.println("===学生的上转型对象====");

Human4 human=new Pupil4("001","黎明");

System.out.println("该对象的属于:"+human.typeName);

System.out.println(human.like());

human.think();

System.out.println("\n===上转型对象还原为学生对象===");

Pupil4 pupil=(Pupil4)human;

System.out.println("该对象属于"+pupil.typeName);

System.out.println(pupil.like());

pupil.think();

pupil.learn();

}

}

运行结果:

===学生的上转型对象====

该对象的属于:人类

001号黎明爱好文娱体育运动

黎明在思考..

===上转型对象还原为学生对象===

该对象属于学生类

001号黎明爱好文娱体育运动

黎明在思考..

001号黎明扎起学习中...