Подтвердить что ты не робот

Может ли вызов конструктора означать создание объекта?

Когда мы создаем объект Subclass, который расширяет абстрактный класс, также запускается конструктор абстрактного класса. Но мы знаем, что мы не можем создавать объекты абстрактного класса. Значит ли это, что даже если конструктор завершает работу без каких-либо исключений, нет гарантии, создан ли объект?

4b9b3361

Ответ 1

Значит ли это, что даже если конструктор завершает работу без каких-либо исключений, нет гарантии, является ли объект создан?

Проще говоря, constructor не создает объект. Он просто инициализирует состояние объекта. Это оператор new, который создает объект. Теперь давайте понимаем это немного подробнее.

Когда вы создаете объект, используя этот оператор следующим образом:

new MyClass();

Объект сначала создается оператором new. Перед возвратом ссылки на вновь созданный объект в результате указанный конструктор обрабатывается для инициализации нового объекта.


Теперь рассмотрим случай Abstract class и конкретный SubClass, когда вы сделаете так:

AbstractClass obj = new ConcreteClass();
Оператор

new создает объект ConcreteClass и вызывает его конструктор для инициализации состояния созданного объекта. В этом процессе конструктор абстрактного класса также вызывается из конструктора ConcreteClass для инициализации состояния объекта в абстрактном классе.

Итак, в основном объект AbstractClass не создается. Это просто, что его конструктор вызывается для инициализации состояния объекта.

Извлеченные уроки:

  • Объект создается оператором new, а не вызовом самого конструктора. Таким образом, объект уже создан до вызова любого конструктора.

  • Конструктор просто используется для инициализации состояния созданного объекта. Он не создает сам объект.

  • Состояние объекта также может содержаться в абстрактном суперклассе.

  • Таким образом, цель вызова конструктора Abstract class заключается только в том, чтобы полностью инициализировать объект, и ни один объект не был создан в процессе.

См:

Ответ 2

Но мы знаем, что мы не можем создавать объекты абстрактного класса

Правильно, но JVM может.

означает ли это, что даже если конструктор завершает работу без каких-либо исключений, нет гарантии, создан ли объект?

Объект определенно создается внутри.

Может ли вызов конструктора означать создание объекта?

Не всегда. вы можете вызвать конструктор с помощью super() и this(), но он не будет создавать экземпляр объекта. (но просто вызовет конструктор)

class AClass
{
    AClass()
    {
        this(1); // will invoke constructor, but no object instatiated.
    }

    AClass(int a)
    {

    }

    public static void main(String[] args)
    {
        AClass obj = new AClass(); // one object instantiated.
    }
}

Ответ 3

Запрет любых исключений, конструктор абстрактного класса запускается только из конструктора подкласса (как первый оператор). Поэтому вы можете быть уверены, что каждый раз, когда выполняется конструктор, он находится в процессе создания объекта.

Тем не менее, вы можете вызвать несколько конструкторов в процессе создания одного объекта, например Subclass() вызов Subclass(String), который вызывает AbstractClass через вызов super() и т.д.

Ответ 4

Subclass == BaseClass + Extras you add in sub class

Таким образом, когда вы создаете подкласс, вызывая его конструктор, есть вызов конструктора базового класса, чтобы убедиться, что все атрибуты (базового класса) также правильно инициализированы.

Ответ 5

Вы можете вызвать только конструктор абстрактного класса как часть конкретного конструктора подкласса. Это нормально, так как абстрактный класс расширен в конкретный класс и это объект этого конкретного класса, который создается.

Ответ 6

Вот как работает поток при вызове конструктора вашего подкласса:

  • Конструктор классов абстрактных классов → здесь объект инициализируется наполовину.
  • Конструктор подкласса завершает выполнение → Объект полностью инициализирован и, следовательно, полностью создан здесь.

Ответ 7

Когда вы вызываете конструктор с помощью new, создается новый объект.

Теперь, как вы, наверное, уже знаете, каждый конструктор любого подкласса, прямо или косвенно, прямо или косвенно, вызывает конструктор из родительского класса (который, в свою очередь, вызывает один из его собственного родительского класса, полностью до объекта). Это называется цепью конструктора.

Вышеупомянутое, однако, не означает, что создаются несколько объектов. Объект был создан при вызове new, и все конструкторы, работающие над этим объектом, уже передали выделенную область. Следовательно, цепочка конструкторов не создает новые объекты. Один вызов new вернет вам один объект.

Ответ 8

Я полностью не согласен с тем, что объект для абстрактного класса не может быть создан, и только jvm может сделать это в случае наследования, даже программист может делать это время от времени, где бы и когда бы он ни намеревался это сделать, используя концепцию анонимного класса: Посмотрите на этот код и попробуйте его самостоятельно

abstract class Amit{ 
void hai()
{System.out.print("Just Wanna say Hai");}
abstract void hello();
}
class Main{
stic public void main(String[]amit)
{
Amit aa=new Amit(){
void hello(){Sstem.out.print("I actually dont say hello to everyone");
}};
aa.hello(); }}