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

TextView textView = (TextView) findViewById(R.id.textView) is Upcasting or Downcasting?

我对下面的代码是向上转换还是向下转换完全感到困惑。 如果有怎么办?

TextView一个超级class,我认为它是View的子类型。

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

它叫做 DownCasting。你可以深入了解here

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

您提到的代码是向下转型。因为 findViewByID returns View 对象和 TextView 是 View class 的子对象。当从父级到子级的转换被称为 Down Casting 而从子级到父级的 castinrg 被称为 Upcasting.

注意:当你向上转换时,你通常不需要转换,因为隐式转换。

简而言之,就是向下铸造。

这一行:

findViewById(R.id.textView);

请问return一个视图,但是它是什么样的视图呢? (按钮、列表、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、Benz)

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 ;
    }
}

它们(Benz、BMW)都是显式转换,例如 TextView。

希望对你有帮助