2015-09-03 6 views
1

Я пытаюсь вызвать метод в другом классе, так что я инициировал класс я пытаюсь получить доступ в классе я звоню его от, вот код:NoSuchMethodError при вызове метода из другого класса

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(); 
    } 

Всякий раз, когда я запускаю его я получаю эту ошибку:

NoMethodError

Вот код, где метод, который я звоню содержится:

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; 
    } 
} 

Я новичок в Java, но имею некоторый опыт работы на C#, я не понимаю, почему я получаю сообщение об ошибке на картинке выше, насколько я могу видеть класс, к которому я пытаюсь обратиться, инициировано имя метода. Я получаю ошибку, потому что я пытаюсь получить доступ к подклассу, не обращаясь сначала к суперклассу? Это единственный странный способ, которым я мог подумать, что это происходит неправильно. Спасибо за любую помощь!

+0

Вы уверены, что вы правильно скомпилировали 'Car.java'? –

+4

Попробуйте установить метод AddCar() в 'public'. – Emd4600

+0

Я предполагаю, что вся программа скомпилирована правильно, когда я обращаюсь к двум другим классам и просматриваю их, прежде чем пытаться получить доступ к этому методу. – COYG

ответ

1

Как и другие предложили в комментариях, вы можете видеть эту проблему, так как видимость метода AddCar (рассмотреть вопрос о переименовании это addCar так как это будет более рядный с соглашениями о присвоении имен в Java). Изменение этого public может помочь, но если это не ...

Другой возможности может быть, что вы можете иметь более старую версию Car класса на пути к классам, который не имеет метода AddCar. Поскольку вы смогли скомпилировать все просто, это звучит так, как будто у вас неправильная версия класса Car в пути к классам в среде развертывания. Попробуйте перекомпилировать все, а затем убедитесь, что последние версии всех ваших классов находятся в пути к классам в вашей области развертывания.

+0

Класс автомобиля не был составлен вообще, в этом была проблема, вот комментарий, который я написал выше: И он работал после составления класса автомобиля. Почему вы должны это сделать? Почти уверен, что это не так в C#, может быть, потому, что я использовал IDE и создавал консольные программы, а не напрямую с помощью командной строки, как сейчас. Что, если бы у меня было 30 классов, было бы болью, составляя их индивидуально! – COYG

+0

@ COYG Может быть, подумайте об использовании Maven или другой системы сборки (я лично предпочитаю sbt.) Затем IDE, например IntelliJ или Eclipse. Это упростит вашу жизнь при работе с громоздкими языками, такими как Java. – 2rs2ts

+1

@ COYG Да каждый отдельный файл java должен быть скомпилирован индивидуально. Вот почему IDE могут быть настолько полезными. Если вы не хотите сразу перейти в мир IDE, я предлагаю создать простой скрипт сборки. Это может быть так же просто, как файл 'bat/sh' или инструмент сборки, такой как ant, maven, ivy ect ... –

Смежные вопросы