我是Java的新手...... :(
我需要将一个变量从父类传递给子类,但我不知道该怎么做。 该变量位于父类的方法中,我想在子类的一个方法中使用它。
这是怎么做到的?
public class CSVData {
private static final String FILE_PATH="D:\\eclipse\\250.csv";
@Test
public static void main() throws IOException {
//some code here
String firstname1 = array.get(2).get(1);
}
}
然后是另一个班级
public class UserClassExperimental3 extends CSVData {
public static void userSignup() throws InterruptedException {
//some code here
String firstname= firstname1; //and here it doesnt work
}
}
实际上我认为我成功地这样做了:
在这里添加了变量:
public static void userSignup(String firstname1)
然后在这里使用它:
String firstname=firstname1;
System.out.println(firstname);
但现在我无法将其传递给需要它的方法。
答案 0 :(得分:2)
变量firstname1
是一个局部变量。您无法在其范围之外访问它 - 方法。
您可以做的是将引用的副本传递给您的子类。
由于您正在调用静态方法,最简单的方法是将引用作为参数传递给方法调用:
@Test
public static void main() throws IOException {
//some code here
String firstname1 = array.get(2).get(1);
UserClassExperimental3.userSignup( firstName1 );
}
public class UserClassExperimental3 extends CSVData {
public static void userSignup( String firstNameArg ) throws InterruptedException {
//some code here
String firstname = firstnameArg; // Now it works
}
}
那就是说,既然你正在使用继承,你可能会发现使用实例方法很有用。从方法中删除“静态”。在main()中,构造一个类的实例,为它提供名称,并在实例上调用该方法。
@Test
public static void main() throws IOException {
//some code here
String firstname1 = array.get(2).get(1);
UserClassExperimental3 instance = new UserClassExperimental3( firstName1 );
instance.userSignup();
}
public class UserClassExperimental3 extends CSVData {
private String m_firstName;
public UserClassExperimental3( String firstName ) {
m_firstName = firstName;
}
public void userSignup() throws InterruptedException {
//some code here
String firstname = m_firstname; // Now it works
}
}
如果还将userSignup()添加到CSVData类,则只能在创建时引用特定的子类。这样可以更轻松地切换实现,并且无论您使用哪个子类,都可以更轻松地编写无效的代码。
String firstname1 = array.get(2).get(1);
CSVData instance = new UserClassExperimental3( firstName1 );
instance.userSignup();
答案 1 :(得分:0)
public class Main {
public static void main(String[] args) {
User user=new User();
user.setId(1);
user.setName("user");
user.setEmail("user@email.com");
user.save();
}
}
public class User extends Model {
private int id;
private String name;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
import java.lang.reflect.Field;
public class Model {
public void save(){
for(Field field: Model.this.getClass().getDeclaredFields()) {
field.setAccessible(true);
try {
System.out.println(field.getName()+"="+field.get(Model.this));
} catch (Exception ex) {
ex.printStackTrace();
}
}
return;
}
}