2016-10-16 2 views
0

Ich habe diese KlasseInner-Klasse ist nicht öffentlich Fehler, wenn neue innere Klasse instanziieren

package com.rafael; 

public class Vehicle { 

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

Und in der Hauptfunktion

import com.rafael.Vehicle; 

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

Aber das gibt mir immer diesen Fehler:

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

Antwort

1

Machen Sie die innere Klasse public static

Andernfalls müssen Sie ein Objekt Ihrer äußeren Klasse eine Instanz der inneren als Tim Biegeleisen erwähnt

bereits creat Und den Konstruktor Ihrer inneren Klasse machen public zu

Etwas wie:

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

Ja, weil der Konstrukteur nicht "öffentlich" war. –

0

Sie haben die verschachtelte Klasse falsch angegeben. Sie können nur die innere Klasse in Zusammenhang mit der enthaltenden Klasse instanziiert:

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

Die Syntax, die Sie für eine statische verschachtelte Klasse war verwendet haben, wobei in diesem Fall Ihr Code würde wie folgt aussehen:

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

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