-8

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

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

4

2 回答 2

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();
于 2013-07-10T15:18:41.010 回答
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;
    }
}
于 2018-08-27T11:37:31.407 回答