栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对子类对象的超类引用显示与对子类对象的子类引用相同的行为

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对子类对象的超类引用显示与对子类对象的子类引用相同的行为

在Java中,所有非静态方法都是“虚拟”的,这意味着它们基于基础对象的运行时类型,而不是指向该对象的引用的类型。因此,在对象的声明中使用哪种类型都没有关系,其行为将相同。

声明的影响是在编译时可见的方法。如果

SubClass
具有的方法
SuperClass
不(将其称为
subMethod()
),则您将对象构造为

SuperClass s = new SubClass();

然后,您将只能在上调用可用的方法

SuperClass
。也就是说,尝试调用
s.subMethod()
会给您一个编译时错误。但是,正如您所发现的,如果中存在方法
SuperClass
,但被
SubClass
覆盖,则将执行该方法。

另一方面,静态方法不是虚拟的。运行下面的代码

public class StaticTest {    public static void main(String[] args) {        SuperClass s = new SubClass();        s.method();  // bad idea - calling static method via an object reference    }    public static class SuperClass {        public static void method() { System.out.println("SuperMethod");        }    }    public static class SubClass extends SuperClass {        public static void method() { System.out.println("SubMethod");        }    }}

打印出“
SuperMethod”。但是,您应该很少在乎这些

static
方法是非虚拟的,因为您永远都不能像我上面那样通过对象引用来调用它们。您应该通过类名称来调用它们:

SuperClass.method();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号