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(" ===上转型对象还原为学生对象===");
  Pupil4 pupil=(Pupil4)human;
  System.out.println("该对象属于"+pupil.typeName);
  System.out.println(pupil.like());
  pupil.think();
  pupil.learn();
 }
}

运行结果:

===学生的上转型对象====
该对象的属于:人类
001号黎明爱好文娱体育运动
黎明在思考..

===上转型对象还原为学生对象===
该对象属于学生类
001号黎明爱好文娱体育运动
黎明在思考..
001号黎明扎起学习中...

原文地址:https://www.cnblogs.com/zhangxiaomo/p/3426034.html