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。
希望对你有帮助
我对下面的代码是向上转换还是向下转换完全感到困惑。 如果有怎么办?
是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。
希望对你有帮助