zoukankan      html  css  js  c++  java
  • 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号黎明扎起学习中...

  • 相关阅读:
    Go复习--为何不允许重载overload?
    Go疑问-1
    Go复习--for循环陷井
    Go复习--slice协程不安全
    Go复习之久违的goto语句
    Go复习---编译错误:undefined:
    Linux 环境拷贝文件发生的错误
    【转载】java数据库操作
    VBA文件处理
    【转】关于C#使用Excel的数据透视表的例子
  • 原文地址:https://www.cnblogs.com/zhangxiaomo/p/3426034.html
Copyright © 2011-2022 走看看