Java方法的覆盖与隐藏的区别分析

爱自己才是女王

爱自己才是女王

2016-02-19 10:07

今天图老师小编给大家介绍下Java方法的覆盖与隐藏的区别分析,平时喜欢Java方法的覆盖与隐藏的区别分析的朋友赶紧收藏起来吧!记得点赞哦~

关于隐藏和覆盖的区别,要提到RTTI(run-time type identification)(运行期类型检查),也就是运行期的多态,当一个父类引用指向子类对象的时候,请看下面我编写的一段代码:
代码如下:

public class RunTime {

    public static void main(String[] args) {
        Animal a = new Cat();
        System.out.println(a.A);
        System.out.println(a.b);
        a.voice();
        a.method();

    }

}

class Dog extends Animal {
    public int b = 3;
    public static int A = 3;
    public static void method(){
        System.out.println("狗");
    }
    public void voice() {
        System.out.println("狗叫");
    }
}

class Cat extends Animal {
    public int b = 4;
    public static int A = 4;
    public static void method(){
        System.out.println("猫");
    }
    public void voice() {
        System.out.println("猫叫");
    }
}

class Animal {
    public int b = 0;
    public static int A = 0;
    public static void method(){
        System.out.println("动物");
    }
    public void voice() {
        System.out.println("动物叫");
    }
}

输出结果是:
0
0
猫叫
动物

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

您可以看到,当父类Animal的引用a指向子类Dog时,RTTI在运行期会自动确定该引用的真是类型,当子类  覆盖  了父类的方法时,则直接调用子类的方法,打印出“猫叫”;然而非静态的方法在子类中重写的话就是被覆盖,而静态的方法被子类重写的话就是隐藏,另外,静态变量和成员变量也是被隐藏,而RTTI是只针对覆盖,不针对影藏,所以,静态变量 A 和 非静态变量 b 以及静态方法method() 均不通过RTTI,是哪个类的引用就调用谁的静态方法,成员变量,而这里是父类Animal的引用,所以直接调用父类Animal中的方法以及成员变量。所以静态方法 method(),  静态变量 A 和成员变量 b 打印结果全是父类中的。只用被覆盖的非静态方法voice()才打印子类的。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

Java方法的覆盖与隐藏的区别分析

编程语言 网络编程
Java方法的覆盖与隐藏的区别分析

java中重载、覆盖和隐藏三者的区别分析

编程语言 网络编程
java中重载、覆盖和隐藏三者的区别分析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于Java多线程notify与notifyall的区别分析

编程语言 网络编程
基于Java多线程notify与notifyall的区别分析

Java overload和override的区别分析

编程语言 网络编程
Java overload和override的区别分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java中ArrayList 、LinkList的区别分析

编程语言 网络编程
java中ArrayList 、LinkList的区别分析

Java之String、StringBuffer、StringBuilder的区别分析

编程语言 网络编程
Java之String、StringBuffer、StringBuilder的区别分析

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win8.1 如何设置磁贴的大小

Win8.1 如何设置磁贴的大小

0x0000008E蓝屏错误该怎么解决

0x0000008E蓝屏错误该怎么解决
下拉加载更多内容 ↓