繁体   English   中英

投射到按钮控件(Android):这到底是什么?

[英]Casting to a button control (Android): what exactly is that?

关于“广播”的可用(类似)问题并没有真正弄清这是什么或做什么(顺便说一下,这只是开始的Android编程)。 在哪里和如何注意到“广播”的效果?

之间有什么区别?

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

Button b = findViewById(R.id.btn_second)

亲切的问候,

彼得

尝试这个,

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

但是它是一种什么样的视图,一个按钮,一个列表,一个TextView,EditView等。

在这里,findViewById(R.id.btn_second)返回的是Button类型的View,因此我们将其转换为Button类型。

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

(Dog)和(Cat)是显式强制转换,如(Button)。

这是一个Java继承问题。

findViewByID方法返回一个View类型的对象。 所有小部件类都继承自View,因此我们说“按钮就是视图”

您不能将View对象分配给Button引用。 强制转换运算符告诉编译器“我真的确定此View对象恰好是Button”

如果这没有意义,则需要查看有关继承和强制转换引用对象的教程。

在Java对象类型转换中,可以将一个对象引用类型转换为另一个对象引用。 强制类型转换可以为其自己的类类型,也可以为其子类或超类类型或接口之一。 在Java中有强制转换的编译时规则和运行时规则。

强制转换运算符(类型)用于将值从一种类型转换为另一种类型,或将对象引用更改为兼容类型。

类型不是Android所独有的,如果您想很好地进行面向对象的编程,就需要对类型有个很好的了解。 我建议阅读有关继承多态性类型转换的文章 这些将帮助您理解为什么我们使用我们要处理的对象类型。

要回答你的问题,Android的UI对象从一种被称为所有派生View (文档在这里 )。 这定义了一个接口,即该类型的所有对象必须能够执行的操作,例如能够“绘制”自身。 只要Android实施/扩展了View接口,它就可以与任何类型的可显示对象一起使用,因此您可以创建自己的自定义UI对象,并且Android不需要知道它是一种新型的事实,仅此而已它可以像其他任何View对象一样与其交互。

在您的问题中,您正在垂头丧气 ,在那里您对对象的类型更加具体,以便可以使用您要垂降的类型的定义接口以不同的方式与对象进行交互。 反向转换是另一种方式,您可以使专用对象更加通用,只要它是该类型的子类型,即意味着它实现相同的接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM