Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Java.doc
Скачиваний:
17
Добавлен:
07.09.2019
Размер:
569.34 Кб
Скачать

Использование 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 уже переменная типа суперкласса А. Как отмечалось выше, переменная суперкласса может быть использована для ссылки на любой объект производного класса.

Использование super для доступа к скрытым членам суперкласса

Вторая форма super напоминает действие ссылки this с тем отличием, что super обращается к объекту суперкласса. Общий формат использования второй формы super имеет вид:

super.имя_компоненты;

При этом компонента может быть либо данным, либо методом класса. Эта форма используется в том случае если компонента суперкласса, к которой следует обратиться, скрыта соответствующей (одноименной) компонентой подкласса. Ниже приведен пример демонстрирующий использование второй формы super.

class A // суперкласс А

{ protected int a;

A() { } // конструктор без параметров

A(int aa) // конструктор c 2 параметрами

{ a = aa; // создание нового объекта

}

A(A ob) // конструктор параметром объект

{ a = ob.a; // построение клона объекта

}

void show()

{ System.out.println("supperclass a = " + a);

}

}

class B extends A // подкласс В

{ int a;

B() { } // конструктор без параметров

B(int aa, int bb) // конструктор с параметрами

{ super(aa);

a = bb;

}

B(B ob) // конструктор параметром объект

{ super(ob);

a = ob.a; // построение клона объекта

}

void show()

{ super.show();

System.out.println("subclass a= " + a);

}

void fun()

{ int a;

a = this.a + super.a;

System.out.println("a(supperclass)+a(subclass) = " + a);

}

}

class start

{ public static void main()

{ B ob = new B(1,2);

ob.show();

ob.fun();

}

}