2014-05-08 3 views
0

Я хотел бы создать один класс, а затем другой класс внутри. Этот класс будет напрямую связан с высшим классом. Он должен выглядеть следующим образом (не код, только схема):Класс Java внутри другого класса, конструктор

class company 
    string name 

    class employee 
     string firstName, lastName; 
     int age 

Конечно, у меня есть конструкторы и т.д. Теперь я хочу, чтобы создать компании «г» и сотрудник ф м 2 лет в этой компании. Может быть, не оправдано сделать класс внутри другого класса, и я должен просто создать сотрудника класса с полевой компанией?

Код ниже не работает, компилятор говорит: объемлющей экземпляр, который содержит company.employee требуется

nowa=new company('g',2); 
nowa.prac=new company.employee('f','m',2); 

Полный код ниже:

public class program 
{ 
public static class company 
{ 
    char name; 
    int duration; 

    public class employee 
    { 
     public char imie,nazwisko; 
     public int wiek; 
     public employee(char a,char b,int w) 
     { 
      imie=a; 
      nazwisko=b; 
      wiek=w; 
     } 
    } 
    public company(char n,int c) 
    { 
     name=n; 
     duration=c; 
    } 
} 



public static void main(String []args) 
{ 
    company nowa=new company('g',2); 
    nowa.empl=new employee('f','m',2); 
} 
} 
+0

Разместите текущий код для обеспечения руководства. –

+0

Что такое фирма и pracownik? оправдайте свой код. –

+0

Возможный дубликат [Инициирование внутреннего класса] (http://stackoverflow.com/questions/4070716/instantiating-inner-class) – Seelenvirtuose

ответ

0

Это будет мой подход

public class Employee { 

    //...code 
} 

public class Company { 
//...code 
private List<Employee> employees; 
} 


public static void main(String []args) 
{ 
    Company nowa=new company('g',2); 
    nowa.getEmployees.add(new Employee('f','m',2)); 
} 
} 

Основные изменения от вашего подхода:

  1. Оба класса находятся в отдельном файле (как классы верхнего уровня).
  2. В компании есть список сотрудников (сотрудники HAS). С помощью List вы можете легко добавлять и удалять сотрудников для данной Компании.
  3. Имена классов капитализируются (в соответствии с соглашениями об именах Java с использованием верховного верблюда).
0

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

company nows = new company('g',2); 
nowa.empl = nowa.new employee('f','m',2); 

В этом случае экземпляры внутреннего класса имеет неявную ссылку на экземпляр внешнего класса (использование company.this внутри служащего для доступа к нему).

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

public static class employee 
... 

company nows = new company('g',2); 
nowa.empl = new employee('f','m',2); 
Смежные вопросы