未确定主要方法吗?

问题描述 投票:0回答:4

这里对java来说真的很新。我试图建立在动物的抽象类上,并将其扩展到Ducks的子类。然后,我将创建一个对象ducksworth,该对象证明Duck继承了超类动物的方法,并且可以调用对抽象类变量的引用。当我尝试在Netbeans中运行代码时,即使类AllAnimals包含主调用,它也找不到主方法调用。任何帮助,将不胜感激?该代码完全写在Netbeans的单个文件中。

理想情况下,我希望输出的是“羽毛”

abstract class Animal {

String FUR= "fur";
String FEATHER = "feather";
String SCALE = "scale";
String SHELL = "shell";
String SKIN = "skin";

abstract String getCovering( );
abstract void makeSound();
abstract boolean canFly( );

}

class Duck extends Animal {
    String covering  = FEATHER;
    String sound = "quack";
    boolean flight = true;
    String getCovering() {
        System.out.println("Ducks are covered in " + covering);
        return covering;
    }
    void makeSound() { 
        System.out.println(sound);
    }
    boolean canFly() { 
        return flight; 
    }
}

class allanimals {
    public static void main(String[] args) {
        Duck ducksworth = new Duck();
        ducksworth.getCovering();
    }
}
java inheritance extends
4个回答
1
投票

正如大家所说。将实际课程放在下面。

已完成的更改:

  1. 为了更好的标准,将类名allanimals更改为AllAnimals。
  2. Class AllAnimals已公开,供jvm访问静态main方法。
  3. 文件名作为公共类名称-AllAnimals.java

文件名:AllAnimals.java

abstract class Animal {

String FUR= "fur";
String FEATHER = "feather";
String SCALE = "scale";
String SHELL = "shell";
String SKIN = "skin";

abstract String getCovering( );
abstract void makeSound();
abstract boolean canFly( );

}

class Duck extends Animal {
    String covering  = FEATHER;
    String sound = "quack";
    boolean flight = true;
    String getCovering() {
        System.out.println("Ducks are covered in " + covering);
        return covering;
    }
    void makeSound() { 
        System.out.println(sound);
    }
    boolean canFly() { 
        return flight; 
    }
}

public class AllAnimals {
    public static void main(String[] args) {
        Duck ducksworth = new Duck();
        ducksworth.getCovering();
    }
}


0
投票

您如何运行项目?

将每个类都放在文件中是最简单的,因此您可以使用main https://www.protechtraining.com/content/java_fundamentals_tutorial-hello_world来简单地编译和运行该类

或者,在这里看看:Java: Multiple class declarations in one file

https://www.quora.com/Can-we-keep-more-than-one-class-in-a-single-java-file


0
投票

这不是我推荐的JDK 8惯用语。首选接口代替抽象类。在适当的位置添加默认方法。

[什么时候将Animal的结尾视为继承示例?显然不是今天。

我可能会这样做:

public interface Animal {
    String getCovering();
    void makeSound();
    boolean canFly();
}


public class Duck implements Animal {

    public String getCovering() { return "feathers"; }
    public void makeSound() { return "quack"; }
    boolean canFly() { return true; } 
}

[JUnit的了解还为时不早,

public class AnimalTest {

    @Test
    public void testList() {
        // setup
        List<Animal> animals = Collections.singletonList(new Duck());
        // exercise
        // assert
        Assert.assertEquals("feathers", animals.get(0).getCovering());
        Assert.assertEquals("quack", animals.get(0).makeSound());
        Assert.assertTrue(animals.get(0).canFly());
    }
}

-1
投票

文件中至少一个类应该是公共的,在这种情况下,最好将文件放入allanimals.java,并且必须将该类标记为公共的。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.