• 覆盖与隐藏的区别 (一个列子)


    例子:

    class Student1{
     int math = 70;
     static int computer = 80;
     int english = 65;
     public Student1(){
        study();
        exercise();
     }
     public void study(){
         System.out.println("Student.study:每位学生都在认真学习");
      }
     public static void exercise(){
        System.out.println("Student.exercise:所有学生都在做练习");
     }
    }

    class Graduate1 extends Student1{
     int math = 93;
     int computer = 99;
     static int english = 85;
     
     public Graduate1(){
        study();
        exercise();
     }
     public void study(){
        System.out.println("Graduate.study:每位研究生都在认真学习");
     }
     public static void exercise(){
        System.out.println("Graduate.exercise:所有研究生都在做练习");
     }
     public static void main() {
      Student1 s = new Graduate1();
      System.out.println();
      Graduate1 g = new Graduate1();
      System.out.print(s.math);
      System.out.print(" ");
      System.out.print(s.computer);
      System.out.print(" ");
      System.out.println(s.english);
      System.out.print(g.math);
      System.out.print(" ");
      System.out.print(g.computer);
      System.out.print(" ");
      System.out.println(g.english);
     }
    }

    1. 隐藏与覆盖类方法

        在讲清这个问题之前,先明白什么是隐藏?什么是覆盖?

        所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;对于覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。

        所以在执行Student1 s = new Graduate1();和Graduate1 g = new Graduate1();时,(1)先进行Student1类的构造,这里包括两个方法study()和exercise(),由于study()方法被覆盖,所以先执行Graduate1里study(),再执行Student1里的exercise();(2)再进行Graduate1类的构造,同样包括两个方法study()和exercise(),所以执行顺序为先Graduate1里的study()方法,再Graduate1里的exercise()方法。

    2. 隐藏与覆盖成员变量

        如果子类中的变量和父类中的变量具有相同的名字,那么子类中的变量就会隐藏父类中的变量,不管他们的类型是什么,也不管他们是类变量还是实例变量。

       所以在执行诸如System.out.print(s.math);之类的s实例的程序时,显示为Student1类的成员变量,而执行诸如System.out.print(g.math);之类的g实例的程序时,显示为Graduate1类的成员变量。

    答案:

    Graduate.study:每位研究生都在认真学习
    Student.exercise:所有学生都在做练习
    Graduate.study:每位研究生都在认真学习
    Graduate.exercise:所有研究生都在做练习

    Graduate.study:每位研究生都在认真学习
    Student.exercise:所有学生都在做练习
    Graduate.study:每位研究生都在认真学习
    Graduate.exercise:所有研究生都在做练习
    70 80 65
    93 99 85

  • 相关阅读:
    扒皮下音悦台的“返回顶部”图标效果
    扒皮下京东首页楼层图标的动画效果实现方式
    总结前端开发中的一些特殊规范
    用JS识别各版本浏览器
    各主流浏览器内核介绍
    CSS百分比定义高度的冷知识
    图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法
    从一个简单例子来理解js引用类型指针的工作方式
    仿京东首页商品分类底部色标随鼠标移动特效
    知乎网首页一个延时交互的小思路
  • 原文地址:https://www.cnblogs.com/jiangyi666/p/5754375.html
Copyright © 2020-2023  润新知