-1

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

TextView一个超类,我认为它是View.

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

3 回答 3

2

简而言之,它是向下铸造的。

这一行:

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。

我希望这可以帮助你

于 2018-12-31T07:38:03.280 回答
1

它被称为向下铸造。你可以在这里深入了解

于 2018-12-31T07:35:00.847 回答
1
TextView textView = (TextView) findViewById(R.id.textView);

您提到的代码是向下转换的。因为 findViewByID 返回一个View对象,而 TextView 是View类的子项。当从父级转换为子级时称为向下转换,而从子级到父级的castinrg称为向上转换。

注意:当你铸造起来时,你通常不需要铸造隐式铸造的原因。

于 2018-12-31T07:36:48.447 回答