我试图理解Java中的向上转换和向下转换,并且对以下情况感到困惑(关于下面的代码):
首先-为什么当我包含该行时myAnimal.bark();
,代码无法编译,
第二-(假设我将其注释掉myAnimal.bark();
)为什么调用myAnimal.move()
print
"moveDog"
而不是"moveAnimal"
?即使我们将其设置为类型,也不myAnimal
限于Animal
类中的方法,因为我们已经将其类型声明Animal
为Dog
。
任何帮助是极大的赞赏!这是代码:
public class Animal {
public void move() {
System.out.println("moveAnimal");
}
public static void main(String[] args) {
Dog myDog = new Dog();
Animal myAnimal = myDog;
myAnimal.move();
//myAnimal.bark();
}
}
class Dog extends Animal {
@Override
public void move() {
System.out.println("moveDog");
}
public void bark() {
System.out.println("bark");
}
}
随着这一行的隐式上行:
Animal myAnimal = myDog;
您没有做任何更改基础实例的操作myDog
。您正在做的就是将其分配给继承树中一级更高级别的变量。有效地,这限制了只能调用在中定义的方法Animal
,而不会改变这些方法的解析方式。
由于您已将只能使用的方法限制为在父类上定义的方法Animal
,因此编译器无法解析Dog#bark()
,因为它是的方法Dog
,并且变量myAnimal
被定义为Animal
没有#bark
方法的类型。
#move()
是两者的方法Animal
和Dog
,所以它解决,但它解析为上定义的方法Dog
中,由于myAnimal
仍然是指的一个实例Dog
,尽管是向上转型。
摘自http://developer.android.com/guide/topics/ui/settings.html:
问题内容: 我已经读过,它将在指定的时间后暂停当前正在运行的线程,在此之后它返回可运行状态,以等待其运行。 另外,如果从上下文调用,则不会释放其持有的锁。所以我想知道何时将释放锁定。如果线程进入睡眠状态,则永远无法获得运行的机会,因此它将始终保持锁定,然后保持其他线程如何进入同步的方法/块。 我不确定是否要问有效的问题。但是请帮帮我。 问题答案: 所以我想知道何时将释放锁定。 它将在退出块时(而不
问题内容: 如何获取片段中的上下文? 我需要用我的数据库其构造函数采用的背景下,但并没有工作,所以我能做些什么? 数据库构造函数 问题答案: 你可以使用,返回与关联的活动。 活动是(自扩展以来)。
我有以下代码: 当我尝试编译它时,会出现以下错误: 因此,我尝试使dbConnect静态如下:
本文向大家介绍React.js中的上下文API,包括了React.js中的上下文API的使用技巧和注意事项,需要的朋友参考一下 React上下文api在版本16.3或最新版本中可以安全地用于生产中。添加上下文api的原因是,如果有一系列子组件,则避免传递prop。 在不使用上下文api的情况下,我们必须将道具传递给所有中间组件。另一种替代解决方案是使用第三方库(例如Redux)来维护中央存储。 了
问题内容: 我试图确保我的Rhino脚本(在Java 6下运行)很严格,以便如果脚本开发人员拼错了一个表达式,我希望抛出一个异常。当前发生的情况是该表达式仅计算为“未定义”。 根据Mozilla org https://developer.mozilla.org/en/New_in_Rhino_1.6R6的介绍,现在有一些功能可以在上下文中进行严格检查。我找不到一个可行的例子。 到目前为止,我所做