作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个在运行时填充的 Bird 数组,我如何访问特定于子类的成员方法?
class Bird
{
public Bird() {}
public void fly(int x) {
System.out.println("Flew "+x+" meters");
}
}
class DumbBird extends Bird
{
public DumbBird() {super();}
public void fly(int x) {
x-=5; //we're dumb
System.out.println("Flew "+x+" meters");
}
public void sing() {
System.out.println("La la la!");
}
}
public static void main(String[] args)
{
Bird[] cage = new Bird[10];
cage[0] = new Bird();
cage[1] = new Dumbbird();
cage[2] = new Sleepybird();
//.... more bird types
cage[1].sing(); //is inaccessable because it is of type Bird not DumbBird!
}
有没有一种好方法可以拥有一组泛型类型,同时能够访问特定于子类的成员函数?我不想编辑 Bird 类。
最佳答案
理论上是的。放入数组中的项目是可具体化的,因此您可以确定正在查看的类型并将特定对象转换为其实际类型。不过,这不是一个非常干净的解决方案,因此我不推荐它。
您可以考虑使用一个代表鸟类的抽象类或接口(interface),其中包含大多数鸟类都支持的方法,以及检查方法 canSing()
或 canFly( )
。如果您尝试调用鸟类不支持的方法,不支持此功能的鸟类(例如不会飞的鸟类)可能会抛出 UnsupportedOperationException
,但没有简单的方法来通用引用所有鸟类和了解每种鸟类可以拥有的所有不同方法。
关于java - 创建父类(super class)数组,同时维护多态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28659093/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!