Java 不使用全局变量将对象发送到父类

Java 不使用全局变量将对象发送到父类,java,inheritance,Java,Inheritance,下面是一个简单的课堂,解释我的问题: public class TestA extends TestParent { public TestA { //some code here } public void connect() { //some more code here File project = otherproject.getProjectFile(); } } 我希望此项目文件在TestPare

下面是一个简单的课堂,解释我的问题:

 public class TestA extends TestParent {
    public TestA { 
        //some code here
    }
    public void connect() {
        //some more code here
        File project = otherproject.getProjectFile();
    }
 }

我希望此项目文件在TestParent中可用。有没有一种不在TestParent中创建全局变量的方法?如果还有其他方法,请告诉我。如果出于任何原因,在这种情况下不使用全局变量是一个坏主意,也请对此进行注释。

将其作为connect方法的返回值:


你到底想干什么

您可以这样创建TestParent:

public class TestParent {
    protected File project;
}
并已:

public void connect() {
    //some more code here
    project = otherproject.getProjectFile();
}
或者可能:

public class TestParent {
    private File project;

    protected setProject(File project) {
        this.project = project;
    }
}
与:

或者!如果TestParent正在动态调用connect,则可以让connect返回文件:

public File connect() {
    //some more code here
    return otherproject.getProjectFile();
}

使用抽象方法“getProjectFile”将TestParent类更改为abstrac类

public abstract class TestParent {

   private void methodThatUseFile(){
    // invoke child implementation
    // in this way parent can use project created in child class
    File project= this.getProjectFile();
     // TODO

   }

  abstract File getProjectFile();

}
然后在子类中实现抽象方法

public class TestA extends TestParent {
    public TestA { 
        //some code here
    }

    @Override
    public File getProjectFile() {
        //some more code here
        File project = otherproject.getProjectFile();
        return project;
    }
 }

不是public而是protected创建一个方法并像super.mymethodproject那样执行,创建可见性为protected的属性有什么害处?TestParent类需要对project做什么?若项目是特定于TestA的,那个么您很可能希望该类来处理它,以使您的父类更通用。@XtremeBaumer和@SMA-不受保护,但私有。受保护的字段也会损害封装。@spinyBabbler-在超类中,您可以创建一个私有字段和受保护的方法来初始化和获取它。这与我的要求不完全一样,但可能是我的场景中最好的情况。
public abstract class TestParent {

   private void methodThatUseFile(){
    // invoke child implementation
    // in this way parent can use project created in child class
    File project= this.getProjectFile();
     // TODO

   }

  abstract File getProjectFile();

}
public class TestA extends TestParent {
    public TestA { 
        //some code here
    }

    @Override
    public File getProjectFile() {
        //some more code here
        File project = otherproject.getProjectFile();
        return project;
    }
 }