Я узнал, что мы не можем создать экземпляр абстрактного класса. Но сегодня я проверил некоторые коды, и я чувствую смущение.создать объект абстрактного класса! = Создать экземпляр абстрактного класса?
package MainPackage;
abstract class abstractClass {
abstract abstractClass a_function();
}
public class Src {
abstractClass m;
public abstractClass abstractClassTest() {
return m.a_function();
}
public static void main(String args[]) {
System.out.println("Hello world!");
}
}
Здесь я создать абстрактный класс abstractClass и вернуть его в функции abstractClassTest(). И он скомпилирован успешно без ошибок! IMO перед возвратом что-то, компьютер должен создать объект такого типа. И здесь он должен создать объект abstractClass до return m.function(), который я не могу понять. я думаю, что мы не можем создать экземпляр абстрактного класс означает, что мы не можем создать объект абстрактного класса или мы косяка нового класса (например. abstractClass m = new abstractClass() is illegal
). Но из приведенных выше кодов кажется, что мы можем создать объект абстрактного класса. как он может это понять? Для кода abstractClass m
, что делает компьютер, когда он видит код? Мы не можем сказать, что java создает экземпляр класса m
для кода abstractClass m
? и если java не создает экземпляр класса abstractClass
, как он может вернуть объект abstractClass
в код abstract abstractClass a_function();
?
Вы не *** создаете *** абстрактный класс, просто используя его ссылку. – Bhushan
Обратите внимание, что ваш код * не * создает экземпляр любого объекта abstractclass. Если вы должны были создать подкласс абстрактного класса, вы можете создать его (abstractClass m = new childClass (...)), а затем m.a_function будет действительным. –
Как вы отмечаете, вы не можете «новый» абстрактный класс. У вашего кода нет «нового» в любом месте - так где же проблема? – yshavit