2013-12-17 57 views
0

我不明白这个规则。一年前,我从C#书中学习OOP。所以,我学习了C#OOP。当我编程java时,了解java代码花费很少。但是,当我移动到Android。我发现一些奇怪的东西。像classname.this,object.this,它的参数是interface的构造函数。我认为android并不容易,如果我遇到问题,在stackoverflow中从来没有问过问题,我想我会死的。因为,我无法理解android库(android库文档)中的所有方法。当我阅读文档时,我只了解所有方法中的几个,我理解许多方法的定义。但是当我尝试理解方法的参数时,我总是困惑不解。Android - 困惑Android OOP

我想问。 。 。

为什么这是正确的:

final EditText textBoxSearch = (EditText) findViewById(R.id.textbox_search); 
    textBoxSearch.setVisibility(EditText.GONE); 

为什么这是不对的:

textBoxSearch.setVisibility(textBoxSearch.GONE); 
+4

'GONE'是一个静态变量,而不是一个实例变量,所以你需要做'class.GONE'。它来自['View'](http://developer.android.com/reference/android/view/View.html#GONE),它是'EditText'的子类。它与[Java中的静态变量]相同(http://www.caveofprogramming.com/frontpage/articles/java/java-for-beginners-static-variables-what-are-they/)。 – thegrinner

+0

- 因为“不正确”有点复杂。说出你得到了什么样的错误。 –

+0

@thegrinner我认为你必须回答没有评论 – AndikaK

回答

3

GONE是一个静态变量,而不是一个实例变量,所以你需要做class.GONE。它来自View,其中EditText的子类。

基本上,它属于的类而非实例

这是相同的行为static variables in Java

有时候,你想有一个适用于所有对象的变量。这是通过静态修改器完成的。在其声明中具有静态修饰符的字段称为静态字段或类变量。他们与班级相关,而不是与任何对象相关联。该类的每个实例共享一个类变量,它位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类的实例的情况下操作类变量。

类变量由类名本身引用[...]。

0

我是那种你相反的......我第一次学习Java和只知道一点C#。但据我所知,这两者之间非常相似。

EditText.GONE是一个静态最终变量(就像C中的const)。

一个简单的想法是,对于每一个类,你都可以从中实例化所有的实例,但是你也有一个独立的类对象,这个对象就是所有的静态变量和方法。

+0

我的书不好 – AndikaK

+0

我推荐阅读官方教程。这就是我开始使用Java的方式。 http://docs.oracle.com/javase/tutorial/java/index。html – Tenfour04

+0

我认为“错误”的方式仍然有效,编译器只是给你一个警告,因为“错误”的方式可能表明你意外地做了你不打算做的事情。我认为这与C#中的const的工作方式相同,只是编译器不会提醒你。 – Tenfour04