静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?(Android每日面试题)

568 阅读2分钟

前言

看见即降服,这句话说的是一件事物,只要你看得到,你就能得到。

对我来说记录就是看见。

面试题不只是为了面试,更是为了帮助我们更深入地理解我们已知的知识。

分析

今天这个问题不难,大家动手写一下,继承一下就可知道答案(文底的文章可以看一下哦)。

是否可以被继承

可以被继承,但是为什么呢?为什么,那得看一下继承的概念喽,请看下面学术概念。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

等一下,这个概念好像并不能解释静态属性和静态方法可以被继承,因为子类如果继承父类静态属性和静态方法的话,那么子类就可以调用它们,但是我们都知道静态属性和静态方法是怎么用的,那就是直接父类.静态方法(或者静态属性),对不?但是你说不可以被继承也怪怪的。如果有这个疑惑的同学,可以了解下,静态方法的调用方式有哪些,其实静态方法(或者静态属性)除了可以直接"类名.方法名(属性)"也可以"对象名.方法名(属性)",那我们现在就可以使用**子类.父类中的静态方法(或者静态属性)**了。现在是不是明朗了?所以是可以被继承的。

是否可以被重写

答案是不能被重写。解释这个原因,大家还是得先来了解一下java中的隐藏和覆盖这个概念(引用文章中的覆盖也是重写)。

如果子类里面重写父类静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。而发生隐藏的时候,你声明引用是什么类型,就调用对应类的属性或者方法,而不会发生动态绑定(这个概念就是在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法)。如果发生了重写,就会发生动态绑定,最后调用的方法一定是你创建对象中的方法(而不是你申明引用的类型中的方法)。额。。。这个必须得动手操作一下(或者看一下引用文章中的例子也行)才能理解。

blog.csdn.net/qdh186/arti…