我在使用this
关键字时遇到了一些问题。如果我有几个类实现另一个类,如何在不调用类本身的情况下使用它们的值?我解释一下。
//this is my first class
public class Foo extends FooHelper{
public int fooInt;
public String fooString;
//getter/setter below
}
//this is my second class
public class Foo2 extends FooHelper{
public double fooDouble;
public float fooFloat;
}
//this is my main method, i'm using it for calling the value.
//I omit all the thrash code before.
//This is how i want to call the method:
//imagine before there are onCreate, activity,...
Foo foo = new Foo().GetFooInt();
//this is the class extended from the firsts
public class FooHelper{
public void GetFooInt(){
//here is my problem, i need to call the Foo class and the fooInt value.
//I want also to be able to edit the Foo object, for example:
if(((Foo)this).getFooInt() == 0){
(Foo) this.setFooInt(5);
}
}
}
这是我想要实现的,访问一个类,该类使用扩展类中唯一的this
关键字扩展另一个类。我该怎么办?
编辑:
我认为我解释得很糟糕。 我的问题是我想在FooHelper中访问我的Foo对象,而不是在Foo对象中访问FooHelper的方法。
示例:
使用此代码后:
Foo foo = new Foo();
foo.HelperClassMethod();
我需要(在HelperClass中)访问调用它的Foo对象。
public HelperClass<Foo> {
public void HelperClassMethod(){
//HERE i need to use the "foo" object which invoked this method
}
}
我添加了<Foo>
,可能是我错过了,这是正确的吗?我怎样才能在helper类的方法中使用这个foo对象?谢谢所有
EDIT2:我的问题完全失败了,我想我们可以忽略上面的代码,只需查看下面的内容:
我必须访问扩展类方法中的对象。
我有这堂课:
public class Foo extends FooToExtend{
public int fooInt;
}
扩展的类是:
public class FooToExtend{
public void MethodOne(){
//HERE i need to access the calling object
}
}
现在,在我的主要活动中,我想这样做:
Foo foo = new Foo();
foo.MethodOne();
我怀疑我是如何访问我在foo
内部主要创建的MethodOne
对象。
我必须在
中更改我的FooToExtendpublic class<Foo> FooToExtend{
...
}
但我还不知道如何访问其中的foo对象。
答案 0 :(得分:2)
我在这里看到2个问题,了解this
关键字和extending
clases
问题this
关键字
想象一下,你有一个类并且你正在执行一些代码:关键字this
指的是类本身,如果你在哪里,对象this
将等同于 me
即可。查看here和here更长的解释,示例和教程。
问题extend
此外,您必须从顶部(接口或抽象类)扩展到底部(扩展)类,并在底部实现:
//this is the PARENT (FIRST) class extended from the CHILDREN (SECOND)
public abstract class FooHelper{
public abstract void GetFooInt();
}
//this is the CHILD (SECOND!!!) class
public class Foo extends FooHelper{
public int fooInt;
public String fooString;
@Override
public void GetFooInt() {
// are you sure you getFooInt method can return a null???
if(this.getFooInt() == null){
this.setFooInt(5);
}
//getter/setter below
}
哦,好吧,这很有用。还有一个问题,一种方法是使用抽象,如你所说,但有没有办法在不执行它的情况下做同样的事情?仅供参考,我的目标是使用Foo.FooHelperMethod()并能够在“FooHelperMethod()”中访问Foo类。我希望我解释它,我不知道怎么做..如果不可能我将使用抽象你的建议:)
当然,这是继承,只是不要声明抽象父,并在那里实现方法和属性,所有子节点都会通过扩展父类来拥有这些方法和属性。
让我们看看这个例子:
//this is the PARENT (FIRST) class extended from the CHILDREN (SECOND)
class FooHelper {
int theIntCommonValue;
public int getTheIntCommonValue() {
return theIntCommonValue;
}
public void setTheIntCommonValue(int theIntCommonValue) {
this.theIntCommonValue = theIntCommonValue;
}
}
// CHILDREN CLASS, look how calling this.getTheIntCommonValue() (the parent method)
// doesn't throw any error because is taking parent method implementation
class Foo extends FooHelper {
public void getFooInt() {
if (this.getTheIntCommonValue() == 0)
this.setTheIntCommonValue(5);
}
}
class Foo2 extends FooHelper {
public void getFooInt() {
if (this.getTheIntCommonValue() == 3)
this.setTheIntCommonValue(8);
}
}
我怀疑的是我如何访问我在MethodOne中创建的foo对象。
答案:
将对象作为参数传递。但是,你需要静态类,而不是扩展类,让我们看一下
示例:强>
<强> Foo.java 强>
public class Foo {
public int fooInt;
}
<强> FooHelper.java 强>
public static class FooHelper {
public static void methodOne(Foo foo){
//HERE i need to access the calling object
// for example, this?
if (foo.fooInt == 2)
}
}
现在,你如何执行它?
<强> Main.java 强>
public static void main(String[] args) throws Exception {
Foo foo = new Foo();
FooHelper.methodOne(foo);
}
备注强>
LOWECASE
开始,类名从 UPPERCASE
开始。static public class
答案 1 :(得分:0)
我不确定我完全理解。但看起来你希望GetFooInt
根据扩展它的类来执行不同的操作。所以我认为最好检查一下instanceof
。
public class FooHelper{
public void GetFooInt(){
if(this instanceof Foo)
{
((Foo) this).fooInt = 5;
}
}
}
答案 2 :(得分:0)
根据情况,您想要命名一个班级&#34; 助手&#34;我假设你将它用作帮助类。
public class Helper {
public static int screenHeight = 500;
}
public class AnyOtherClass {
testSomething() {
System.out.println(Helper.screenHeight);
Helper.screenHeight = 510;
System.out.println(Helper.screenHeight);
}
}
答案 3 :(得分:0)
对于一些基本的理解:this
是您在非静态上下文中使用的关键字,用于访问您当前所在的Object的变量和方法。正确使用this
示例:
public class SomeClass {
private int someInt;
public void setSomeInt(int someInt) {
this.someInt = someInt;
}
}
在此示例中,this
是必需的,因为局部变量(/ parameter)someInt
与全局类变量someInt
具有相同的名称。使用this
,您可以访问您所在的对象的类变量。
不必要地使用此示例:
public class SomeClass {
private int someInt;
public int squareSomeInt() {
return this.someInt * this.someInt;
}
}
此处您不需要关键字this
,因为没有名为someInt
的本地变量。
另一方面,super
是一个关键字,它访问父类的变量和方法(类,您的类来自于它)。例如:
public class SomeClass {
private int someInt;
public int squareSomeInt() {
return someInt * someInt;
}
}
来自上学阶层:
public class Other extends SomeClass {
public int squarePlusSquare() {
return super.squareSomeInt() + super.squareSomeInt();
}
}