Читайте также:
|
|
В предыдущем примере показано как можно просто наследовать подкласс от суперкласса. Однако в подклассе достаточно неэффективно реализован конструктор с параметрами. В нем выполняется: во-первых, дублирование действий конструктора суперкласса, во-вторых, отсутствует возможность инициализации переменной b суперкласса при создании объекта подкласса. Решить данные проблемы можно, если использовать ключевое слово super.
Ключевое слово super имеет две формы. Первая служит для вызова конструктора суперкласса, вторая для доступа к компонентам суперкласса скрытым компонентом подкласса.
Использование super для вызова конструктора суперкласса
Из конструктора подкласса можно осуществить вызов конструктора суперкласса используя ключевое слово super в следующей форме.
super(список параметров);
где список параметров – список передаваемых переменных конструктору суперкласса. Эта инструкция должна быть всегда первой в конструкторуе подкласса. Как и обычный конструктор (точнее в соответствии с ним) super может быть перегружен.
class A // суперкласс А
{ int a; // (public) доступен в подклассе
private int b; // не доступен в подклассе
protected int c; // доступен в подклассе
A(){} // конструктор без параметров
A(int aa, int bb) // конструктор c 2 параметрами
{ a = aa; // создание нового объекта
b = bb;
c = a+b;
}
A(int aa, int bb, int cc) // конструктор c 3 параметрами
{ a = aa; // создание нового объекта
b = bb;
c = cc;
}
A(A ob) // конструктор параметром объект
{ a = ob.a; // построение клона объекта
b = ob.b;
c = ob.c;
}
void fun_A()
{ System.out.println("supperclass (a,b,c) "+a+' '+ b+' '+c);
}
}
class B extends A // подкласс В
{ int d;
B() { } // конструктор без параметров
B(int aa, int bb, int dd) // конструктор c 3 параметрами
{ super(aa,bb);
d = dd;
}
B(int aa, int bb, int cc, int dd) // конструктор c 4 параметрами
{ super(aa,bb,cc);
d = dd;
}
B(B ob) // конструктор параметром объект
{ super(ob);
d = ob.d; // построение клона объекта
}
void fun_B()
{ System.out.println("subclass (a,c,d) "+a+' '+c+' '+d);
}
}
class start
{ public static void main(String[] args)
{ A ob1=new A(1,2);
ob1.fun_A();
A ob2=new A(3,4,5);
ob2.fun_A();
B ob3 = new B(6,7,8,9);
ob3.fun_A();
ob3.fun_B();
B ob4 = new B(10,11,12);
ob4.fun_A();
ob4.fun_B();
}
}
Несколько слов о конструкторе:
B(B ob) // конструктор параметром объект
{ super(ob);
d = ob.d; // построение клона объекта
}
В нем super(ob), вызывается для объекта типа класс B. Эта инструкция активизирует конструктор своего непосредственного суперкласса А:
A(A ob),
где ob уже переменная типа суперкласса А. Как отмечалось выше, переменная суперкласса может быть использована для ссылки на любой объект производного класса.
Дата добавления: 2015-09-11; просмотров: 78 | Поможем написать вашу работу | Нарушение авторских прав |