2015-09-01 4 views
-2

У меня есть класс, который получает вход от пользователей. Затем результаты анализируются и сохраняются в этом классе I, указанном ниже. Затем есть отдельный класс, который берет то, что хранится в нижеприведенном классе, и создавая что-то с ним. Я бы опубликовал все классы, но есть слишком много строк кода. Я поставил ниже точного класса, на который у меня есть вопрос (минус другие переменные того же типа для простоты) Я хотел бы знать, есть ли способ доступа к переменным из абстрактного класса в другом классе. Вот мой абстрактный класс:Доступ к переменным из других классов

public abstract class ParsResults { 

    public String AnsName; 

    public String AnsType; 

} 

Тогда у меня есть еще один класс, который нуждается в этих переменных. Я просто не знаю, как подойти к нему. Заранее спасибо.

+0

Является ли другой класс подклассом? Кроме того, следуйте соглашениям о присвоении имен Java ('name'). –

+1

Ну, если вы _extend_ этот класс из другого класса, все переменные будут доступны. Фактически, поскольку вы сделали переменные «public», они доступны в любом месте. –

+0

Это не имеет смысла: вы получаете доступ к информации от * объектов * не от классов, а тем более от абстрактных классов. Ваш вопрос пахнет проблемой [XY] (http://mywiki.wooledge.org/XyProblem), где вы спрашиваете, как решить конкретную проблему с кодом, когда лучшим решением является использование совершенно другого подхода. Подумайте о своей проблеме немного больше, а затем расскажите нам подробности о том, что именно вы пытаетесь сделать, а не как вы пытаетесь ее решить. –

ответ

-2

Вам необходимо установить этот класс, но вы не можете создать экземпляр абстрактного класса. Так первый создать не абстрактный класс ведьма расширяет ParsResults, а затем создать экземпляр этого нового класса и в вашей основной вы можете увидеть такие переменные, как это:

public class NewClass extends ParsResults { 

    //... 

} 


    public static void main(String [] args){ 

     NewClass nc = new NewClass(); 

     // ... 

     System.out.println(nc.Name); 

    } 
0
  1. Там нет абсолютно никакого способа доступа к переменные экземпляра экземпляров абстрактного классов, поскольку они не могут иметь экземпляры.
  2. Пожалуйста, не делайте переменные экземпляра общедоступными, делайте их частными и предоставляйте геттеры и сеттеры.
  3. Ваши переменные экземпляра должны начинаться с строчной буквы.
  4. Если у вас есть экземпляр конкретного подкласса ParsResults, вы можете получить доступ к его значениям с помощью геттеров (см. Пункт 2.).
-1

Чтобы разделить переменные между классами, существует три способа:

public class Human { 

    // instance variables 
    public String name; 
    public int age; 

    //constructor, creates an instance of the Human class. 
    public Human(String s, int i){ 

    name = s; 
    age = i; 
    } 

} 

в этом случае ваши переменные экземпляра являются общедоступными. так в другом классе, при создании экземпляра класса человека по телефону:

Human aHuman = new Human(tom, 25); 

, то вы можете получить доступ к двум переменным экземпляра напрямую. вы можете получить его значение с помощью:

String theHumanName = aHuman.name; 

и вы можете установить его значение (изменить) с помощью:

aHuman.name = "mike"; 

две эти строки будут работать, только если переменные являются общедоступными. Причина, по которой вы должны сделать их конфиденциальными, заключается в том, чтобы не изменять значения извне класса. Поэтому, если они являются частными, вы создаете методы получения и установки, в зависимости от необходимости. Вот как это должно быть сделано:

public class Human { 

    // instance variables 
    private String name; 
    private int age; 

    //constructor, creates an instance of the Human class. 
    public Human(String s, int i){ 

     setName(s); 
     setAge(i); 
    } 

    /** 
    * @return the name 
    */ 
    public String getName() { 
    return name; 
    } 

    /** 
    * @param name the name to set 
    */ 
    public void setName(String name) { 
     this.name = name; 
    } 

    /** 
    * @return the age 
    */ 
    public int getAge() { 
     return age; 
    } 

    /** 
    * @param age the age to set 
    */ 
    public void setAge(int age) { 
     this.age = age; 
} 

} 

в настоящее время из-за пределов класса, вы можете позвонить:

String theHumanName = aHuman.getName();  // this a method call, therefore you must have the parentheses 

и вы можете установить его значение (изменить) с помощью:

aHuman.setName("mike"); 
+0

Третий способ передачи данных в качестве аргументов конструктору, например, когда я создал экземпляр «aHuman». –

Смежные вопросы