"mysecondclass", который является подклассом суперкласса "myfirstclass" должен наследовать все свойства суперкласса "myfirstclass" и ожидается, что он выведет значение x, но вместо этого ничего не печатает
package myfirstproject;
public class myfirstclass {
protected int x = 10;
//getter
public void getX() {
System.out.println(x);
}
public static void main(String[] args) {
/* it asked me to define this main method here although it's useless in this situation
*/
}
}
class mysecondclass extends myfirstclass {
public static void main(String[] args) {
mysecondclass mysecondobject = new mysecondclass();
mysecondobject.getX(); //prints nothing
}
}
я действительно новичок в java, и я на самом деле все еще изучаю его основы также я не знаю, почему он всегда просит меня добавить основной метод в суперкласс, хотя я уже объявил его в подклассе (я слышал, что одного основного метода достаточно для одного java-файла) любая помощь очень ценится, заранее спасибо
В Java обычно нам нужен только один основной метод в качестве записи в общедоступном классе, имя класса которого также является именем файла. Таким образом, вам нужно только переместить основной метод из подкласса в родительский класс. У тебя все будет отлично.
@yuanqingfei вы можете определить основные методы в любом понравившемся вам классе, при условии, что это не внутренний класс (каким ни один из этих классов не является).
основной метод в mysecondclass является статическим, поэтому на самом деле он не предназначен для переопределения (статического) метода в первом классе. Когда вы сказали «он всегда просит меня добавить основной метод», кто это? Или что это?
@AndyTurner Я знаю это, сказал я ususally
, в его случае вы можете видеть, что есть только один публичный класс. Это означает, что это основной класс. И когда вы попытаетесь вызвать основной метод, он найдет только основной метод основного класса. Что касается всех остальных классов в этом же java-файле, то они бесполезны.
@yuanqingfei, но нет необходимости «перемещать ваш основной метод из подкласса в родительский класс». Это не проблема. «Это означает, что это основной класс». Нет особой вещи, называемой «основной класс». Основной метод может быть объявлен в любом не внутреннем классе.
@AndyTurner, очевидно, хочет, чтобы его основной метод (во втором классе) работал. То, что я предложил, является для него рабочим решением.
@yuanqingfei, если основной метод должен быть определен в mysecondclass
, предложение переместить его в myfirstclass
не является решением (и даже если OP ошибается в «необходимости», ссылка на mysecondclass
из основного метода myfirstclass
создаст циклическую зависимость) . Вам просто нужно бежать, например. с java myfirstproject.mysecondclass
.
@AndyTurner Ты пробовал? Я пробовал на своей локальной машине. Оно работает. Я не встречал никакой циклической зависимости.
@yuanqingfei Java может компилировать и запускать классы с циклическими зависимостями, но это не значит, что это хорошая идея.
Совершенно не связанное, но соглашение Java заключается в использовании регистра Pascal для имен классов, что означает, что соглашение диктует, что ваши классы должны быть MyFirstClass
и MySecondClass
. Соблюдение соглашений делает ваш код более читабельным. Код, который легко читается, получает больше помощи и быстрее.
Связано: stackoverflow.com/questions/11551412/multiple-main-functions/…
У вас есть 2 способа заставить ваш код работать так, как вы хотите.
1) создать 2 java файла. один — myfirstclass.java, второй — mysecondclass.java. каждый держит свой основной класс. Таким образом, вы можете запускать любой основной метод по своему желанию.
2) просто сохраните эти 2 класса в одном java-файле. тогда, когда вы его запустите, он будет запускать только основной метод по умолчанию в общедоступном классе.
«он будет запускать только основной метод по умолчанию в общедоступном классе». Java не требует, чтобы основной метод находился в общедоступном классе, и по умолчанию не запускает какой-либо класс. Java запускает класс, который вы ей говорите. Если вы вызываете java myproject.myfirstclass
, он запускает основной метод в этом классе; если вы вызываете java myproject.mysecondclass
, он запускает основной метод в этом классе.
@AndyTurner, ты пробовал в Eclipse? если вы не определите основной метод в общедоступном классе, у вас не будет возможности запустить основной метод во втором классе. Я согласен с вами, если он с командной строкой.
Просто измените ключевое слово public на второй класс. Если вы используете онлайн-компилятор, они обычно ищут основной метод внутри общедоступного класса.
package myfirstproject;
class myfirstclass {
protected int x = 10;
//getter
public void getX() {
System.out.println(x);
}
}
public class mysecondclass extends myfirstclass {
public static void main(String[] args) {
mysecondclass mysecondobject = new mysecondclass();
mysecondobject.getX(); //printx X
}
}
Нет. Таким образом, ему нужно изменить имя своего java-файла.
Вы не понимаете функции
public static void main(String[] args)
В документах Java:
The public static void keywords mean the Java 1 virtual machine (JVM) interpreter can call the program's main method to start the program (public) without creating an instance of the class (static), and the program does not return data to the Java VM interpreter (void) when it ends.
У вас есть два
public static void main(String[] args)
В двух разных классах! Вы запускаете или компилируете тот, который использует myfirstclass
Поэтому для этого типа примера или теста рекомендуется иметь только один класс Java Main
public class Main {
public static void main(String[] args) {
// Call Your classes
}
}
Будьте более чистыми и организованными в своем коде!
И еще одно. Для запуска из командной строки используйте этот тип команд
java MyApp arg1 arg2
В случае сомнений всегда читайте документы!
Как ты это делаешь?