JAVA中方法和变量在继承中的覆盖和隐藏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中方法和变量在继承中的覆盖和隐藏相关的知识,希望对你有一定的参考价值。

我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题。

隐藏 :child隐藏了parent的变量和方法,那么,child不能访问parent被隐藏的变量或者方法,但是,讲B转换成A中,可以访问A被隐藏的变量或者方法

覆盖 :child覆盖了parent的变量或者方法,那么,child不能访问parent被覆盖的变量或者方法,将child转换成parent后同样不能访问parent被覆盖的变量或者方法

 

首先看一下JAVA中方法和变量在继承时的覆盖和隐藏规则

1.父类的实例变量和静态变量能被子类的同名变量隐藏

2.父类的静态方法被子类的同名静态方法隐藏

3.父类的实例方法被子类的同名实例变量覆盖

 

还有几点需要注意的是

1.不能用子类的静态方法隐藏 父类中同样标示(也就是返回值 名字 参数都一样)的实例方法

2.不能用子类的实例方法覆盖 父类中同样标示的静态方法

3.这点儿请注意,就是变量只会被隐藏 不会被覆盖 ,无论他是实例变量还是静态变量,而且,子类的静态变量可以隐藏 父类的实例变量,子类的实例变量可以隐藏 父类的静态变量

public class pratices{

    public static void main(String[] args){
        new Child().say(); // 1
    }
}


class Parent{
    String message = "parent";
    void say(){
        System.out.println(message);
    }
}

class Child extends Parent{
    String message = "child";
}

1的位置输出的是什么?

是parent。

所以总结如下:

1.同名的实例方法被覆盖 ,同名的静态方法被隐藏 ,child类的getName实例方法覆盖 了parent的getName实例方法,chind的getKind方法隐藏 了parent类的getKind方法

2.隐藏 和覆盖 的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏 的变量和方法,而不能访问父类被覆盖 的方法

3.如果需要访问父类被隐藏 的实例变量,加上super就好了,比如访问父类的name,写上super.name就好了


本文出自 “多罗医生的博客” 博客,谢绝转载!

以上是关于JAVA中方法和变量在继承中的覆盖和隐藏的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中方法和变量在继承中的覆盖和隐藏

方法和变量在继承时的覆盖和隐藏问题

Java继承方法隐藏(覆盖)

Java中的覆盖和隐藏以及final关键字

Java-继承与覆盖摘抄

java覆盖和隐藏