TextView textView =(TextView)findViewById(R.id.textView)是向上转换还是向下转换?

时间:2018-12-31 07:30:20

标签: java android downcast upcasting

我完全困惑下面的代码是向上转换还是向下转换。 如果可以,怎么办?

TextView的超类,我假设它是View的子类型。

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

3 个答案:

答案 0 :(得分:1)

其称为DownCasting。您可以深入了解here

答案 1 :(得分:1)

{{1}}

您提到的代码是 downcasting 。由于findViewByID返回 View 对象,而TextView是 View 类的子级。从父级投射到子级时称为 Down Casting ,而从父级投射到子级时称为 Upcasting

注意:强制转换时,通常不需要强制隐式转换。

答案 2 :(得分:1)

简而言之,这是不正确的。

此行:

findViewById(R.id.textView);

会返回一个视图,但是它是什么样的视图? (按钮,列表,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。

希望对您有帮助