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