扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
与在 Java 中一样,我们不能使用对基类的引用来访问派生类的成员和方法,即使基类引用可能包含对派生类型对象的有效引用也同样如此。
我们可以通过隐式地引用派生的类型来引用派生类:
ColorPoint clrpt = new ColorPoint(); Point pt = clrpt;
在这段代码中,基类引用 pt 包含 clrpt 引用的副本。
通过使用 base 关键字,我们可以访问子类中的基类成员,即使这些基类成员在超类中被重写也同样如此。例如,我们可以创建一个派生类,该类所包含的方法具有与基类中相同的签名。如果我们在此方法前加上 new 关键字,就表示这是一个属于派生类的全新方法。通过 base 关键字,我们仍然可以提供方法来访问基类中的原始方法。
例如,我们的 Point 基类有名为 invert() 的方法,它交换 x 和 y 坐标。通过使用下面这样的代码,我们可以在派生类 ColorPoint 中提供此方法的替代方法:
public new void invert() { int holding = X; X = Y; Y = holding; screenColor = Color.Gray; }
正如您所见,该方法交换 x 和 y,然后将点的颜色设置为灰色。通过在 ColorPoint 中创建另一个方法(例如下面的这个方法),我们可以提供对此方法的基实现的访问:
public void baseInvert() { base.invert(); }
然后,我们就可以通过调用 baseInvert() 方法来调用 ColorPoint 对象中的基方法。
ColorPoint clrpt = new ColorPoint();clrpt.baseInvert();
请记住,如果我们将对基类的引用赋值给 ColorPoint 的实例,然后访问它的方法,我们将获得相同的效果:
Point pt = clrpt; pt.invert();查看本文来源
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者