Java 从不同类调用方法时发生NoSuchMethodError

Java 从不同类调用方法时发生NoSuchMethodError,java,methods,Java,Methods,我试图在另一个类中调用一个方法,因此我在调用它的类中启动了我试图访问的类,下面是代码: Car c = new Car(); Van Vans = new Van(); SportsCar s = new SportsCar(); MiniVan m = new MiniVan(); while (SelectMotor < 1 || SelectMotor > 4) { System.out.println("\t\t Choose the vechile you w

我试图在另一个类中调用一个方法,因此我在调用它的类中启动了我试图访问的类,下面是代码:

Car c = new Car();
Van Vans = new Van();
SportsCar s = new SportsCar();
MiniVan m  = new MiniVan();

while (SelectMotor < 1 || SelectMotor  > 4) {
    System.out.println("\t\t Choose the vechile you wish to add:");

    System.out.println("1.Car");
    System.out.println("2.Van");
    System.out.println("1.SportsCar");
    System.out.println("4.MiniVan");

    SelectMotor = in.nextInt(); 

    if (SelectMotor == 1) {
        c.AddCar();
    }

我是Java新手,但有一些C#方面的经验,我不明白为什么会出现上图中显示的错误,因为我可以看到我尝试访问的类已启动,方法的名称匹配。我之所以出错是因为我试图访问子类而没有首先访问超类吗?这是我唯一认为它出了问题的奇怪方式。谢谢你的帮助

正如其他人在评论中所建议的,您可能会看到这个问题,因为
AddCar
方法的可见性(考虑将其重命名为
AddCar
,因为这样做更符合java的命名约定)。将此更改为
public
可能会有所帮助,但如果不行


另一种可能是类路径上的
Car
类的旧版本没有
AddCar
方法。因为您能够很好地编译东西,所以在我看来,您的部署环境中的类路径上的
Car
类的版本是错误的。尝试重新编译所有内容,然后确保所有类的最新版本都位于部署区域的类路径上。

您确定正确编译了
Car.java
?尝试设置AddCar()方法访问
public
。我假设整个程序编译正确,因为在尝试访问此方法之前,我访问了另外两个类并浏览了它们。
AddCar()
具有包访问权限,如果
Car
和您的另一个类不在同一个类中,则您将无法访问此方法。顺便说一句,您可能不需要
Vehicle v=新车()
Car
类中,因为
Car
扩展了
Vehicle
,所以它可以访问其所有方法。另外,我建议您遵循,因此变量和方法名称应该以小写开头。car类根本没有编译,这就是问题所在,我在上面发表的评论是:编译car类后,它就起作用了。你为什么要这么做?几乎可以肯定的是,C#中的情况并非如此,可能是因为我使用IDE并通过IDE创建控制台程序,而不是像现在这样直接使用命令提示符。如果我有30门课,那么单独编译会很痛苦@COYG可能考虑使用Maven或另一个构建系统(我个人更喜欢SBT),然后是IDE,例如ItILLJ或Eclipse。在使用诸如Java之类的繁琐语言时,将使您的生活更加轻松。@COYG是的,每个单独的Java文件都必须单独编译。这就是IDE如此有用的原因。如果你不想马上进入IDE世界,我建议你编写一个简单的构建脚本。这可以像一个
bat/sh
文件或者像ant、maven、ivy等构建工具一样简单…@COYG您的IDE应该能够自动编译整个项目。如果您使用的是Eclipse,默认情况下应该是这样,但是Eclipse项目有自己的类路径问题…:)如果你真的想深入了解版本控制,我建议你学习和使用Maven()-对于小项目来说,这可能太过分了,但我已经使用它很多年了,不打算很快停止:)@2rs2ts我们在想同样的事情,你只是打字比我快;)
import java.util.Scanner;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;

class Car extends Vehicle {
    Vehicle v = new Vehicle();
    WriteFile WriteCarDetails = new WriteFile(CarDetails, true);
    Scanner SaveCarDetails = new Scanner(System.SaveCarDetails);
    String WriteMe;

    void AddCar() {
        System.out.println("\n\n\t\t\tAdding a Car");
        System.out.print("\nEnter Make: ");
        v.SetMake = SaveCarDetails.next;
        System.out.print("\nEnter Model: ");
        v.SetModel = SaveCarDetails.next;
        System.out.print("\nEnter Litre: ");
        v.SetLitre = SaveCarDetails.nextDouble;
        System.out.println("\nEnter Top Speed: ");
        v.SetTopSpeed = SaveCarDetails.nextInt;
        System.out.println("\nEnter Gears: ");
        v.SetGears = SaveCarDetails.nextInt;
        System.out.println("\nEnter Doors: ");
        v.SetDoors = SaveCarDetails.nextInt;
    }
}