Любой конструктор в подклассе вызовет конструктор без аргументов (или конструктор по умолчанию) родительского класса. если вы определяете параметризованный конструктор в родительском классе, вы должны явно вызвать конструктор родительского класса с ключевым словом super, иначе он выдаст ошибку компиляции.
class Alpha
{
Alpha(int s, int p)
{
System.out.println("base");
}
}
public class SubAlpha extends Alpha
{
SubAlpha()
{
System.out.println("derived");
}
public static void main(String[] args)
{
new SubAlpha();
}
}
Приведенный выше код выдаст ошибку компиляции:
prog.java:13: error: constructor Alpha in class Alpha cannot be applied to given types;
{
^
required: int,int
found: no arguments
reason: actual and formal argument lists differ in length
1 error
Вышеупомянутая ошибка возникла из-за того, что у нас нет конструктора аргументов / конструктора по умолчанию в родительском классе, и мы не вызываем параметризованный конструктор из подкласса.
Теперь, чтобы решить эту проблему, либо вызовите параметризованный конструктор следующим образом:
class Alpha
{
Alpha(int s, int p)
{
System.out.println("base");
}
}
public class SubAlpha extends Alpha
{
SubAlpha()
{
super(4, 5); // calling the parameterized constructor of parent class
System.out.println("derived");
}
public static void main(String[] args)
{
new SubAlpha();
}
}
Вывод
base
derived
or
определите конструктор без аргументов в родительском классе следующим образом:
class Alpha
{
Alpha(){
}
Alpha(int s, int p)
{
System.out.println("base");
}
}
public class SubAlpha extends Alpha
{
SubAlpha()
{
System.out.println("derived");
}
public static void main(String[] args)
{
new SubAlpha();
}
}
вывод
derived
person
Anmol Middha
schedule
19.05.2019