2015-06-17 2 views
-1

У меня есть класс Shipне может ссылаться, прежде чем надтипа был назван Java

public class Ship { 

    private String name; 
    private boolean loaded; 
    private int size; 
    private boolean bIsDefeated; 
    private int gunpower; 

    public Ship(int size, int gunpower, String name) { 
     this.size = size; 
     this.gunpower = gunpower; 
     this.name= name; 
     loaded = true; 
     bIsDefeated = false; 
    } 
} 

и Submarine

class Submarine extends Ship { 

    private final String NAME = "U-Boot"; 
    private final int SIZE = 2; 
    private final int GUNPOWER = 1; 

    public Submarine(){ 
     super(SIZE,GUNPOWER,NAME); //Here it gets underlined 
    } 
} 

Может кто-нибудь сказать мне, почему это не возможно?

+0

Что такое 'UBoot' –

+0

и какая именно ошибка вы видите? Из названия вашего вопроса не ясно. – EJK

+0

'NAME' не является статическим и не может быть вызван в этой точке. – Dragondraikk

ответ

2
public UBoot(){ 
    super(SIZE,GUNPOWER,NAME); 
} 

Похоже, что вы пытаетесь сделать const uctor с другим именем, чем класс. Попробуйте static factory method

public static Submarine uboot() { 
    // something like 
    Submarine s = new Submarine(UBOAT_SIZE, UBOAT_GUNPOWER, "UBoat"); 
    return s; 
} 

где UBOAT_SIZE и UBOAT_GUNPOWDER являются private static final int переменные в классе

и конструктор Ship «s неправильно

this.bezeichnung = name; 

Должно быть

this.name = name; 

EDIT

Хорошо вы изменили свой вопрос сейчас ...

private final String NAME = "U-Boot"; 
private final int SIZE = 2; 
private final int GUNPOWER = 1; 

public Submarine(){ 
    super(SIZE,GUNPOWER,NAME); //Here it gets underlined 
} 

SIZE, GUNPOWDER и NAME все должны быть private static final ... переменные, потому что у вас нет экземпляра Submarine в момент конструктора - поэтому они должны быть static

0

Изменение NAME в static

class Submarine extends Ship { 

    private final static String NAME = "U-Boot"; 
    private final static int SIZE = 2; 
    private final static int GUNPOWER = 1; 

    public Submarine() { 
     super(SIZE, GUNPOWER, NAME); 
    } 

Я полагаю, ваш вопрос имя конструктора опечатка.

0

Ваш подводный конструктор неправильно

public UBoot(){ 
    super(SIZE,GUNPOWER,NAME); 
} 

Должно быть

public Submarine(){ 
    super(SIZE,GUNPOWER,NAME); 
} 

UPDATE как указано NAME переменная должна быть static

+0

может кто-нибудь объяснить все эти downvotes? –

+0

Я заметил, что сегодня, по некоторым вопросам, ответы просто будут беспорядочно опущены без видимых причин. Похоже, кто-то злоупотребляет системой. – Dragondraikk

+0

выглядит странно ... все, кажется, вопросы –

0

есть несколько проблем:

Там нет UBoot класса, но Submarine:

public UBoot(){ 
     super(SIZE,GUNPOWER,NAME); 
} 

должен быть

public Submarine(){ 
      super(SIZE,GUNPOWER,NAME); 
} 

и

нет поля имени bezeichnung.

Это:

this.bezeichnung = name; 

должно быть:

this.name = name; 

NAME должен быть static так это:

private final String NAME = "U-Boot"; 

должно быть:

private static final String NAME = "U-Boot"; 
Смежные вопросы