在Java中将变量从父类传递给子类

时间:2013-07-10 14:44:48

标签: java

我是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);

但现在我无法将其传递给需要它的方法。

2 个答案:

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