投射到一个按钮控件(安卓):究竟是什么呢?(Casting to a button control

2019-09-17 23:38发布

在“铸造”可用的(类似)的问题没有真正弄清楚这是什么或没有(刚开始的Android编程的方式)。 在哪里以及如何做一个通知“铸造”的效果?

是什么区别:

Button b = (Button) findViewById(R.id.btn_second)

Button b = findViewById(R.id.btn_second)

亲切的问候,

彼得

Answer 1:

尝试这个,

findViewById(R.id.btn_second)  will return a View. 

但它是什么样的看法,一个按钮,一个列表,一个TextView,EditView中,等等。

这里findViewById(R.id.btn_second)是返回式按钮的视图,所以我们把它转换为按钮式。

Button b = (Button) findViewById(R.id.btn_second);

好吧,我给你一个例子。

public abstract class Animal{
    public abstract void sound();
}

public class Dog extends Animal{
    public void sound(){
        System.out.println("Wooffffff");
    }
}

public class Cat extends Animal{
    public void sound(){
        System.out.println("Meowwwwwwww");
    }
}

现在,如果我创建1种狗和猫1个..对象

Dog d = new Dog();
Cat c = new Cat();

public class CloneAnimal{

    public void doIt(Animal a){
        if(a instanceof Dog)
            Dog d1 = (Dog) a;
        else 
            Cat c1 = (Cat) a ;
    }
}

(狗)和(CAT)是明确的转换,如(按钮)。



Answer 2:

这是一个Java的继承问题。

findViewByID返回类型视图的对象的方法。 所有控件类的从View继承,所以我们说“的按钮是一个视图”

您不能查看对象分配给一个按钮参考。 转换操作符告诉编译器“我真的相信,这View对象恰好是一个按钮”

如果不决策意识,你需要查看参考对象继承的教程,和铸造。



Answer 3:

在Java对象的类型转换,一个对象可以参考类型转换成另一种对象引用。 演员可以到自己的类类型或它的子类或超类或接口中的一个。 有在Java铸造编译时的规则和运行规则。

转换运算符(类型)用于从数值一种类型转换到另一种或改变的对象引用一个兼容的类型。



Answer 4:

类型是不是唯一到Android,并且是要得到,如果你想要做的面向对象编程很好的一个很好的理解的东西。 我建议你阅读了继承 , 多态和类型转换 。 这将有助于给你我们为什么使用类型,我们做对象的理解。

要回答你的问题,Android的UI对象从一种被称为所有派生View (文档在这里 )。 这定义了一个接口,也就是这是什么类型的所有对象必须能够做的,如能“画”本身。 这让Android来,只要它实现/扩展了与任何类型的显示对象的工作View界面,让您可以创建自己的定制UI对象和Android并不需要知道事实上,它是一种新型的,只有它可以像任何其他与之交互的View对象。

在你的问题,你向下转型 ,在那里你是更具体的关于对象的类型,这样就可以在使用定义你向下转换的类型的接口以不同的方式与对象交互。 上溯造型是走另一条路,你正在做一个专门的对象更通用的,只要它是子类型的类型,这意味着它实现了相同的接口。



文章来源: Casting to a button control (Android): what exactly is that?