2015-04-19 5 views
0

У меня возникли проблемы с доступом к String из другого класса, и я понятия не имею, насколько проще я могу это сделать. Например, у меня есть класс под названием «Человек», и у меня есть имя String. Я устанавливаю «имя» для имени через конструктор, а также напрямую. И у меня есть еще один класс под названием «Кредит», который я еще не пытаюсь получить. Мой последний класс называется «App», и здесь все делается.переменная доступа java от другого класса

Btw - Person - мой суперкласс, а Loan продлевает личность, а приложение расширяет кредит, и все они находятся в одном пакете.

Теперь в моем классе App я попытался получить доступ к строковому «имени» для ТОЛЬКО объекта, который я создал. И снова я назначил имя через конструктор и прямо, но так или иначе не работает. И изначально у меня было установлено, что мой набор имен защищен, потому что, как я его понимаю: protected = методы доступа/переменные в том же классе, том же пакете или подклассе И даже после того, как я опубликовал свою публикацию String, она STILL не работает. Я полностью потерял ....

когда я типа

System.out.println(omid.name); 

он говорит, что не может быть разрешен к переменной, и мне нужно, чтобы сделать местный один.

Спасибо!

Вот мой код для лица:

package Programs; 

public class Person { 
    public String name; 
    protected int age; 
    protected int id; 
    protected String status; 
    protected int alienNumber; 
    protected int socialSecurityNumber; 

    Person() 
    { 

    } 

    Person(String name, int age, int id) 
    { 
     this.name = name; 
     this.age = age; 
     this.id = id; 
    } 



    public void setid(int id) 
    { 
     if(id >= 100000) 
     { 
      this.socialSecurityNumber = id; 
      System.out.println("You are now a citizen " + name); 
      System.out.println("Social Security Number: " + socialSecurityNumber); 
     } 
     else 
     { 
      System.out.println("Sorry " + name + " you do not meet the qualitifactions for citizenship"); 
      alienNumber = id; 
      System.out.println("You alien number is: " + alienNumber); 

     } 
    } 



    public String toString() 
    { 
     if(id >=99000) 
     { 
      status = "citizen"; 
     } 
     else 
     { 
      status = "immigrant"; 
     } 

     return "Name: " + name + 
       "Age: " + age + 
       "Id: " + id + 
       "Status " + status; 
     } 
public static void main(String[] args) 
{ 
    Person omid = new Person("omid nassir", 28, 120000); 
    omid.name = "omid"; 
} 




} 

Код для займа

package Programs; 

import Programs.Person; 


public class Loan extends Person{ 


    public static final int LOANAMOUNT1 = 250000; 
    public static final int LOANAMOUNT2 = 500000; 
    public static final int LOANAMOUNT3 = 750000; 
    public static final int LOANAMOUNT4 = 1000000; 
    public int income; 
    public int loanRequested; 


    Loan(int income, int socialSecurityNumber, int loanRequested) 
    { 
     this.income = income; 
     this.socialSecurityNumber = socialSecurityNumber; 
     this.loanRequested = loanRequested; 
    } 


    public void applyForLoan(String name, int socialSecurityNumber, int income, int loanAmount) 
    { 
    int obtainable = LOANAMOUNT1/4; 
     if(socialSecurityNumber >= 99999) 
     { 
      if(income > obtainable) 
      { 
       obtainable = loanAmount; 
       System.out.println("Congradulations " + name + " you are eligible for loan amount of " + loanAmount); 
      } 
     } 
     else if(socialSecurityNumber <=99999) 
     { 
      obtainable = LOANAMOUNT1; 
      System.out.println("Sorry " + name + " in order to qualify for " + loanAmount + " you need to be" 
        + " a citizen and have a minimum income of " + obtainable); 
      System.out.println("Loan amount granted: " + LOANAMOUNT1); 
     } 
    } 


} 

Код для App

package Programs; 

public class App extends Person { 

     public static void main(String[] args) 
    { 
     System.out.println(omid.name); 
    } 


} 
+1

У вас есть 2 'main (String [] args)' methods (в ​​приложении и Person). Я не уверен, что вы пытаетесь сделать, но вам нужно только 1 – grebesche

+0

«Приложение» расширяет «Лицо», поэтому строка «name» должна быть унаследована. Таким образом, вы можете получить к нему доступ, как при доступе к локальным переменным. 'System.out.println (name);' Кроме того, если «omid» является другим «Лицом». Но в вашем случае у вас есть только 1 человек, поэтому он должен работать только с именем 'name' вместо« omid.name » – HyperZ

+0

Когда класс App расширяет Person, это не значит, что в App.main() у вас будут вещи, которые вы созданный в Person.main() –

ответ

1

Вам нужно определить omid в методе main в App. Вы определили omid в пределах main из Person, но эту переменную невозможно получить, так как это совершенно другая область. Возможно, вы захотите прочитать на static и его семантику.

+0

Я знаю, что статично, я пытаюсь создать программу для практики, где я могу создавать несколько людей и основываться на их статусе, если они имеют право на получение кредита или нет. Поэтому, если бы я создал статическое имя String, это изменилось бы для каждого экземпляра. Я все еще новичок в Java, поэтому я могу ошибаться. но я снова прочитаю статику. Благодарю. – rissandimo

+0

Создание его статического подразумевает, что оно разделяется всеми объектами этого класса (типа). Изменение значения означает, что оно будет изменено для всех экземпляров этого класса. – HyperZ

+0

Точно, я не хочу, чтобы он был общим для ВСЕХ экземпляров. Я хотел сделать как дюжину разных объектов типа Person, все с их собственными именами, доходами и т. Д. – rissandimo

0

У вас есть несколько методов static void main(). Запускается только тот, который находится в App. Я вижу, что App extends Person; Я не думаю, что это то, чего ты хочешь. Статические методы нельзя переопределить; он не будет автоматически отвечать на ваш основной метод в Person. Единственное утверждение, которое выполняется в вашей программе:

System.out.println(omid.name); 
Смежные вопросы