关于“铸造”的可用(类似)问题并没有真正阐明这是什么或做什么(顺便说一下,刚刚开始 Android 编程)。人们在哪里以及如何注意到“铸造”的效果?
有什么区别:
Button b = (Button) findViewById(R.id.btn_second)
和
Button b = findViewById(R.id.btn_second)
?
亲切的问候,
彼得
尝试这个,
findViewById(R.id.btn_second) will return a View.
但它是一个什么样的视图,一个Button,一个List,一个TextView,EditView等等。
这里 findViewById(R.id.btn_second) 返回一个 Button 类型的 View,所以我们将它转换为 Button 类型。
Button b = (Button) findViewById(R.id.btn_second);
好的,我会给你一个例子。
public abstract class Animal{
public abstract void sound();
}
public class Dog extends Animal{
public void sound(){
System.out.println("Wooffffff");
}
}
public class Cat extends Animal{
public void sound(){
System.out.println("Meowwwwwwww");
}
}
现在,如果我创建 1 只狗和 1 只猫对象..
Dog d = new Dog();
Cat c = new Cat();
public class CloneAnimal{
public void doIt(Animal a){
if(a instanceof Dog)
Dog d1 = (Dog) a;
else
Cat c1 = (Cat) a ;
}
}
(Dog) 和 (Cat) 是显式转换,如 (Button)。
这是一个Java继承问题。
findViewByID 方法返回 View 类型的对象。所有的小部件类都继承自 View,所以我们说“A Button IS A View”
您不能将 View 对象分配给 Button 引用。演员表操作员告诉编译器“我很确定这个 View 对象恰好是一个按钮”
如果这没有意义,您需要查看有关继承和引用对象转换的教程。
在 Java 对象类型转换中,一个对象引用可以类型转换为另一个对象引用。转换可以是它自己的类类型,也可以是它的子类或超类类型或接口之一。在 java 中有用于强制转换的编译时规则和运行时规则。
强制转换运算符(类型)用于将值从一种类型转换为另一种类型或将对象引用更改为兼容类型。
类型不是 Android 独有的,如果你想做好面向对象编程,你需要很好地理解它。我建议阅读有关继承、多态性和类型转换的内容。这些将帮助您了解我们为什么使用我们所做的对象类型。
为了回答您的问题,Android UI 对象都派生自一个名为(此处View
的文档)的类型。这定义了一个接口,即这种类型的所有对象必须能够做什么,例如能够“绘制”自己。这允许 Android 使用任何类型的可显示对象,只要它实现/扩展接口,因此您可以创建自己的自定义 UI 对象,Android 不需要知道它是一个新类型的事实,只需知道它可以像任何其他对象一样与之交互。View
View
在您的问题中,您正在向下转换,您可以更具体地了解对象的类型,以便您可以使用您向下转换到的类型的已定义接口以不同的方式与对象交互。向上转型是另一种方式,在这种情况下,您要使专用对象更通用,前提是它是该类型的子类型,这意味着它实现了相同的接口。