我对下面的代码进行向上或向下转换感到完全困惑。如果是这样,怎么办?
TextView
是一个超级类,我认为它是View
的子类型。
TextView textView = (TextView) findViewById(R.id.textView);
简而言之,它是向下铸造的。
这一行:
findViewById(R.id.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一样。
我希望这对你有帮助
它被称为Downcastting。 你可以在这里深入理解
TextView textView = (TextView) findViewById(R.id.textView);
你提到的代码是向下铸造的。因为 findViewByID 返回一个视图对象,而 TextView 是 View 类的子级。从父级到子级的转换称为向下转换,而从子级到父级的castinrg称为向上转换。
注意:投射时,通常不需要投射隐式投射的原因。