Хотя есть много хороших ответов, я хотел бы дать свои 2 цента.
Конструктор НЕ СОЗДАЕТ ОБЪЕКТ . Используется для инициализации объекта.
Да, у класса Abstract всегда есть конструктор. Если вы не определите свой собственный конструктор, компилятор предоставит конструктор по умолчанию классу Abstract.
Выше справедливо для всех классов - вложенных, абстрактных, анонимных и т. Д.
Абстрактный класс (в отличие от интерфейса) может иметь не финальные нестатические поля, которые требуют инициализации. Вы можете написать свой собственный конструктор в абстрактном классе, чтобы сделать это. Но в этом случае не будет никакого конструктора по умолчанию.
public abstract class Abs{
int i;
int j;
public Abs(int i,int j){
this.i = i;
this.j = j;
System.out.println(i+" "+j);
}
}
Будьте осторожны при расширении выше абстрактного класса, вы должны явно вызывать super из каждого конструктора. Первая строка любого конструктора вызывает super (). если вы явно не вызовете super (), Java сделает это за вас.
Ниже код не скомпилируется:
public class Imp extends Abs{
public Imp(int i, int j,int k, int l){
System.out.println("2 arg");
}
}
Вы должны использовать его, как показано ниже:
public class Imp extends Abs{
public Imp(int i, int j,int k, int l){
super(i,j);
System.out.println("2 arg");
}
}