android访问扩展类

时间:2015-11-20 08:40:56

标签: java android class this extends

我在使用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对象。

我必须在

中更改我的FooToExtend
public class<Foo> FooToExtend{
    ...
}

但我还不知道如何访问其中的foo对象。

4 个答案:

答案 0 :(得分:2)

我在这里看到2个问题,了解this关键字和extending clases

问题this关键字

想象一下,你有一个类并且你正在执行一些代码:关键字this指的是类本身,如果你在哪里,对象this将等同于 me 即可。查看herehere更长的解释,示例和教程。

问题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
}

编辑1

  

哦,好吧,这很有用。还有一个问题,一种方法是使用抽象,如你所说,但有没有办法在不执行它的情况下做同样的事情?仅供参考,我的目标是使用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);
    }
}

EDIT2:

  

我怀疑的是我如何访问我在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);
}

备注

  • 惯例说,java中的方法从 LOWECASE 开始,类名从 UPPERCASE 开始。
  • 您必须将这两个类放在sepparated文件中才能允许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();
    }
}