Любой конструктор в подклассе будет вызывать конструктор без аргументов (или конструктор по умолчанию) родительского класса. если вы определите параметризованный конструктор в родительском классе, то вам придется явно вызывать конструктор родительского класса с помощью ключевого слова 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
или
определить конструктор без аргументов в родительском классе следующим образом:
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