2016-10-16 4 views
0

У меня есть этот классВнутренний класс не является публичной ошибки при создании экземпляра нового внутреннего класса

package com.rafael; 

public class Vehicle { 

    public class InnerVehicle { 
     InnerVehicle() { 
      System.out.println("This is InnerVehicle"); 
     } 
    } 
} 

И в главной функции

import com.rafael.Vehicle; 

public class VehicleTest { 
    public static void main(String[] args) { 
     Vehicle v = new Vehicle(); 
     Vehicle.InnerVehicle iv = v.new InnerVehicle(); 
    } 
} 

Но это всегда дает мне эту ошибку:

java: InnerVehicle() is not public in com.rafael.Vehicle.InnerVehicle; cannot be accessed from outside package

ответ

1

Сделать внутренний класс public static

В противном случае вам нужен объект вашего внешнего класса создающего экземпляр внутренние, Тим Biegeleisen уже упоминалось

И сделать конструктор вашего внутреннего класса public слишком

Что-то вроде:

public class Vehicle {  
    public static class InnerVehicle { 
     public InnerVehicle() { 
      System.out.println("This is InnerVehicle"); 
     } 
    } 
} 
+0

Да, это из-за того, что конструктор не был «публичным». –

0

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

Vehicle v = new Vehicle(); 
InnerVehicle iv = v.new InnerVehicle(); 

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

public class Vehicle { 
    static public class InnerVehicle { 
     InnerVehicle() { 
      System.out.println("This is InnerVehicle"); 
     } 
    } 
} 

Vehicle.InnerVehicle iv = new Vehicle.InnerVehicle();