2017-01-23 11 views
1

Я переключился с C++ на Java и столкнулся с проблемой вложенных классов. Я хотел бы инициировать экземпляр подкласса в конструкторе суперкласса. Я пробовал это так, но, похоже, это неправильно.Как создать экземпляр внутреннего класса в конструкторе внешнего класса

public class Aircraft { 
    public class LandingGear { 
    } 

    public Aircraft() { 
     Aircraft.LandingGear myLandingGear = this.new LandingGear(); 
    } 
} 

Идея заключается в том, что каждый экземпляр класса Aircraft имеет экземпляр «myLandingGear» из подкласса шасси летательного аппарата.

+0

Что случилось с этим кодом? – Andremoniy

+1

шасси * не должен ** быть *** подклассом самолета! –

+1

Существует неправильное представление о том, что означает 'есть экземпляр'. Это не должно быть внутренним классом. Но самолет должен иметь переменную этого класса – AxelH

ответ

0

Каждый самолет будет иметь шасси летательного аппарата

public class Aircraft { 
    private LandingGear myLandingGear; 


    public Aircraft() { 
     myLandingGear = new LandingGear(); 
    } 

    public LandingGear getLandingGear() { 
     return this.myLandingGear; 
    } 

} 
+0

Большое спасибо за быстрый ответ, он выглядит очень элегантно! Может ли LandingGear быть классом в этом случае? Является ли myLandingGear назначаемым для своего экземпляра Aircraft (например, myAircraft.myLandingGear)? –

+0

oops yes, modified – jonhid

+0

Fabisn, yes ... LandingGear должен быть независимым классом со своими атрибутами/методами ... Когда вы создаете новый экземпляр Aircraft, у этого арикрата будет экземпляр LandingGear в качестве атрибута, чтобы он был используйте геттер при условии ... myAircraft.getLandingGear() – jonhid

2

Для этого случая использования, ваш вложенный класс должен быть static (если он собирается быть вложенными на всех), а затем просто использовать простой new:

public class Aircraft { 
    public static class LandingGear { 
    // ----^ 
    } 

    public Aircraft() { 
     Aircraft.LandingGear myLandingGear = new LandingGear(); 
    // --------------------------------------^^^^ 
    } 
} 

Когда это не статична, что это внутренний класс, который из вашего описания не то, что вы хотите. More on nested classes in this Java tutorial.

Но если у LandingGear нет причин для вставки внутри Aircraft, подумайте о том, чтобы сделать его равным.

0
public class Aircraft { 
    public class LandingGear { 

     public static void m1() 
     { 
     //Your code snipet 
     }  

    } 

    public Aircraft() { 
     LandingGear.m1(); 
    } 
} 
+3

Добро пожаловать в переполнение стека! Хотя этот фрагмент кода может решить этот вопрос, [включая объяснение] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. –