• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张小莫
博客园    首页    新随笔    联系   管理    订阅  订阅

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号黎明扎起学习中...

 

posted @ 2013-11-15 20:28  张小莫  阅读(996)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3