Как создать рабочий суперкласс с подклассом, используя закрытые члены Java - PullRequest
0 голосов
/ 24 мая 2019

Я занимаюсь программированием учебного лагеря и создал суперкласс «Животное» с подклассом «Лев». Все переменные являются частными.

Когда я пытаюсь передать требуемые значения, я получаю сообщение об ошибке, в котором говорится, что Lion не может быть преобразован в тип. Это мой первый вопрос, когда-либо задаваемый в StackOverflow, поэтому извините, если не соблюдаются обычные правила.

/// Класс животных с подклассом лев ///

public class Animal {
    private int numTeeth;
    private boolean spots;
    private int weight;

    public Animal(int numTeeth, boolean spots, int weight) {
        this.setNumTeeth(numTeeth);
        this.setSpots(spots);
        this.setWeight(weight);
    }

    int getNumTeeth() {
        return numTeeth;
    }

    boolean getSpots() {
        return spots;
    }

    int getWeight() {
        return weight;
    }

    public void setNumTeeth(int numTeeth) {
        this.numTeeth = numTeeth;
    }

    public void setSpots(boolean spots) {
        this.spots = spots;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    class Lion extends Animal {
        private boolean maine;
        private String region;
        private int type;

        public Lion(boolean maine, String region, int type) {
            super(numTeeth, spots, weight);
            this.setMaine(maine);
            this.setRegion(region);
            this.setType(type);
        }

        boolean getMaine() {
            return maine;
        }

        String getRegion() {
            return region;
        }

        int getType() {
            return type;
        }

        public void setMaine(boolean maine) {
            this.maine = maine;
        }

        public void setRegion(String region) {
            this.region = region;
        }

        public void setType(int type) {
            this.type = type;
        }

        void showAnimal() {
            System.out.println("The number of teeth is: " + getNumTeeth());
            System.out.println("Does the animal have spots!: " + getSpots());
            System.out.println("The animals weight!: " + getWeight());
            System.out.println("Do the animal have a maine!: " + getMaine());
            System.out.println("The animal is from: " + getRegion());
            System.out.println("The animal is a: " + getType());
        }
    }
}

/// Статистика животных Я пытаюсь передать в "AnimalDetails", который является новым файлом класса ///

public class AnimalStats {

    public static void main(String[] args) {

        Lion stats = new Lion();
        stats.setMaine(true);
        stats.setNumTeeth(20);
        stats.setRegion("South Africa");
        stats.setSpots(false);
        stats.setType(2);
        stats.setWeight(150);
    }
}

Я нахожу ошибку в / Lion stats = new Lion (); / Льва нельзя вернуть к типу

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Это случай вложенного класса с одним внешним классом и одним внутренним классом.

Вам придется использовать класс Outer для создания экземпляра внутреннего класса.

Поскольку конструктор по умолчанию недоступен, вам придется указывать значение при создании экземпляра.

Animal.Lion stats = new Animal(20, false, 150).new Lion(true, "South Africa", 2);

AnimalStats класс:

public class AnimalStats {
    public static void main(String[] args) {

        Animal.Lion stats = new Animal(20, false, 150).new Lion(true, "South Africa", 2);
    }
}

Примечание: это решение предполагает, что класс Animal должен быть сохранен как есть, и должен быть исправлен только код вызывающего абонента.

1 голос
/ 24 мая 2019

Лев не объявлен статичным

Чтобы построить Lion таким, какой вы есть, Lion должен быть статическим внутренним классом.

Объявленный конструктор в Lion не содержит параметров для супер

Добавьте параметры для вызова super или предоставьте значения по умолчанию внутри реализации конструктора для numTeeth, spot и weight при вызове super.

У Льва нет конструктора с нулевым аргументом

Ваш код пытается создать Lion без аргументов. Если вам нужен конструктор с нулевым аргументом, добавьте его и установите значения по умолчанию для всех членов.

В противном случае вызовите конструктор, который вы уже определили.

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

public class Animal {
    private int numTeeth;
    private boolean spots;
    private int weight;

    public Animal(int numTeeth, boolean spots, int weight) {
        this.setNumTeeth(numTeeth);
        this.setSpots(spots);
        this.setWeight(weight);
    }

    int getNumTeeth() {
        return numTeeth;
    }

    boolean getSpots() {
        return spots;
    }

    int getWeight() {
        return weight;
    }

    public void setNumTeeth(int numTeeth) {
        this.numTeeth = numTeeth;
    }

    public void setSpots(boolean spots) {
        this.spots = spots;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    static class Lion extends Animal {
        private boolean maine;
        private String region;
        private int type;

        public Lion(boolean maine, String region, int type, int numTeeth, boolean spots, int weight) {
            super(numTeeth, spots, weight);
            this.setMaine(maine);
            this.setRegion(region);
            this.setType(type);
        }

        boolean getMaine() {
            return maine;
        }

        String getRegion() {
            return region;
        }

        int getType() {
            return type;
        }

        public void setMaine(boolean maine) {
            this.maine = maine;
        }

        public void setRegion(String region) {
            this.region = region;
        }

        public void setType(int type) {
            this.type = type;
        }

        void showAnimal() {
            System.out.println("The number of teeth is: " + getNumTeeth());
            System.out.println("Does the animal have spots!: " + getSpots());
            System.out.println("The animals weight!: " + getWeight());
            System.out.println("Do the animal have a maine!: " + getMaine());
            System.out.println("The animal is from: " + getRegion());
            System.out.println("The animal is a: " + getType());
        }
    }

    public static void main(String[] args) {
        Lion stats = new Lion(true, "South Africa", 2, 20, false, 150);
    }
}
...