TextView textView = (TextView) findViewById(R.id.textView) 是



我对下面的代码进行向上或向下转换感到完全困惑。如果是这样,怎么办?

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称为向上转换

注意:投射时,通常不需要投射隐式投射的原因。

最新更新