2015-11-22 5 views
0

Продвижение Java-программирования в последнее время приводит к ошибке. пожалуйста, помогитеJava, импорт не разрешен, наследование, внутренний класс

Есть два класса, PersonTest.java:

public class PersonTest { 

    public static void main(String[] args) { 
    Person person1=new Person("dummy","sdymmt","20","male","washington"); 
    System.out.println("Name: "+person1.getName()); 
    System.out.println("Surname: "+person1.getSurname()); 
    System.out.println("Age: "+person1.getAge()); 
    System.out.println("Gender:" +person1.getGender()); 
    System.out.println("Birthplace: "+person1.getBirthplace()); 
    Person person2= new Person(400); 
    System.out.println("Income:"+person2.getX()+" mije leke"); 
    System.out.println("Tax:"+person2.Taksat()+" mije leke"); 
    Student student1= new Student("adsd","zedsdsadza"); 
    System.out.println("emri"+student1.getEmer()); 
} 

} 

, а также Person.java:

public class Person { 
    private String Name; 
    private String Surname; 
    private String Age; 
    private String Gender; 
    private String Birthplace; 
    private double x; 
    public Person() 
    { 

    } 
    public Person(String Name, String Surname, String Age, String Gender, String Birthplace) { 
     this.Name = Name; 
     this.Surname = Surname;  
     this.Age = Age; 
     this.Gender = Gender; 
     this.Birthplace = Birthplace; 

    } 

    public String getName() { 
     return Name; 
    } 

    public String getSurname() { 
     return Surname; 
    } 

    public String getAge() { 
     return Age; 
    } 

    public String getGender() { 
     return Gender; 
    } 

    public String getBirthplace() { 
     return Birthplace; 
    } 

    public Person(double x) { 
     this.x = x; 
    } 

    public double getX() { 
     return x; 
    } 

    double Taksat() { 
     return (0.1 * x); 
    } 

    public class Student extends Person { 
     private String University; 
     private String Faculty; 

     public Student(String Universiteti, String Fakulteti) { 
      super(Name, Surname, Age, Gender, Birthplace); 
      this.Faculty = Fakulteti; 
      this.University = Universiteti; 
     } 

     public String getFaculty() { 
      return Faculty; 
     } 

     public String getUniversity() { 
      return University; 
     } 
    } 
} 

Два класса находятся в одном пакете по умолчанию. Как исправить тот факт, что тестовый класс не распознает ученика внутреннего класса как класс.

+1

Возможный дубликат [как вызвать метод внутреннего класса из метода static main()] (http://stackoverflow.com/questions/16954599/how-to-call-inner-classs-method-from-static-main -method) –

ответ

2

Вложенный нестатический класс называется Inner Classes Эти классы не могут жить без Outer class (который их завернул).

Java docs

Экземпляр InnerClass может существовать только внутри экземпляра OuterClass и имеет прямой доступ к методам и полям его охватывающему экземпляра.

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

OuterClass.InnerClass innerObject = внешнийObject.new InnerClass();

Попробуйте использовать:

Person.Student student = person1.new Student(PARAMETERS); 

Важно Марка:

Конечно, вы должны высоко рассмотреть, что это не хороший дизайн, потому что вы можете это классы, чтобы быть видимым снаружи из Person class, но также потому, что Person.Student наследует от Person, в котором он уже содержит Student class, который обычно выглядит как петля или круг, что обычно не идет od идея для первого места.

+0

Спасибо, мой друг. Он работал очень хорошо. Это было упражнение, которое профессор разрешил из класса на родину и сказал, чтобы продолжить дизайн, который он дал, не знаю почему. Я хотел сделать класс отдельно, сам по себе, сам по себе, а не просто расширяться. –

2

Потому что нет студенческого класса. Поскольку он вложен, это Person.Student

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