我对下面的代码是否向上或向下完全感到困惑。如果有怎么办?
是TextView
一个超类,我认为它是View
.
TextView textView = (TextView) findViewById(R.id.textView);
简而言之,它是向下铸造的。
这一行:
findViewById(R.id.textView);
将返回一个视图,但它是一个什么样的视图?(Button,List, TextView, ..) 看看这个例子:
public abstract class Car{
public abstract void power();
}
public class BMW extends Car{
public void power(){
System.out.println(2200);
}
}
public class Benz extends Car{
public void power(){
System.out.println(2100);
}
}
创建上述类的对象(宝马,奔驰)
BMW bmw = new BMW();
Benz benz = new Benz();
public class CarFactory{
public void create(Car car){
if(car instanceof Benz)
Benz benz = (Benz) car;
else
BMW bmw = (BMW) car ;
}
}
它们(奔驰、宝马)都是显式强制转换,如 TextView。
我希望这可以帮助你
它被称为向下铸造。你可以在这里深入了解
TextView textView = (TextView) findViewById(R.id.textView);
您提到的代码是向下转换的。因为 findViewByID 返回一个View对象,而 TextView 是View类的子项。当从父级转换为子级时称为向下转换,而从子级到父级的castinrg称为向上转换。
注意:当你铸造起来时,你通常不需要铸造隐式铸造的原因。