Upload
hanhi
View
223
Download
3
Embed Size (px)
Citation preview
Inheritance of methods (metožu mantošana) Methods overriding (metožu aizstāšana) Methods overloading (metožu pārslogošana)
Apakštips automātiski manto metodes no galvenā tipa. Apakštips var pārdefinēt metodes, kuras tas ir mantojis un var pievienot jaunas metodes. Var pievienot metodes ar tādu pašu nosaukumu kā metodēm, kuras objekts ir mantojis.
Kad objektam ir vairākas metodes ar vienādu nosaukumu, to sauc par pārslogošanu (overloading). Pārslogošanu izmanto, kad grib izpildīt vienu darbību dažādos veidos. Kad tipam ir vairākas metodes ar vienādu nosaukumu, kompilators izmanto metožu parametrus, lai saprastu kāda metode ir vajadzīga.
Mantotas metodes pārdefinē, lai piemērotu to uzvedību apakštipam. To sauc par aizstāšanu (overriding).
Super type
Sub type
Method ME1(a)
Method ME1(a)
Method ME1(b)
Method ME1(a)
Method ME1(a)+ -
1
Inheritance of methods(use of object type hierarchy)
type STUDENT under PERSONmethod YEARS – years in university
type PERSONmethod YEARS – age of person
not final
2
Type PERSON and STUDENT creation
create or replace type PERSON as object(PERS_CODE varchar2(12),SURNAME varchar2(20),FIRST_NAME varchar2(20),member function YEARS return number) not final;
create or replace type body PERSON asmember function YEARS return number isbeginreturn EXTRACT(YEAR from SYSDATE) – EXTRACT(YEAR from TO_DATE(SUBSTR(SELF.PERS_CODE, 1,6),'DDMMRR')) + 1;end;end;
create or replace type STUDENT under PERSON(FACULTY varchar2(20),GROUPE varchar2(10),ENTER_DATE date,overriding member function YEARS return number);
create or replace type body STUDENT asoverriding member function YEARS return number isbeginreturn EXTRACT(YEAR from SYSDATE) – EXTRACT(YEAR from SELF.ENTER_DATE) +1;end;end;
age of person
years in university
3
Table PERSONS creation
create table PERSONS of PERSON;
insert into PERSONS values(PERSON('120386-11111', 'Koks', 'Juris'));
insert into PERSONS values (STUDENT('220986-22222', 'Lapa', 'Rasma', 'DITF', 'ABC3', TO_DATE('010906', ' DDMMRR' )));
insert into PERSONS values (STUDENT('121287-22222', 'Celms', 'Liene', 'DITF', 'ABC4', TO_DATE('010907', ' DDMMRR' )));
insert into PERSONS values (PERSON('231187-33333', 'Sakne', 'Varis'));
select VALUE(A).FIRST_NAME, VALUE(A).YEARS()from PERSONS A;VALUE(A).FIRST_NAME VALUE(A).YEARS()------------------------------------------------------------------------------Juris 30Rasma 10Liene 9Varis 29
select VALUE(A).FIRST_NAME, TREAT(VALUE(A) PERSON).YEARS()from PERSONS A;VALUE(A).FIRST_NAME TREAT(VALUE(A) PERSON).YEARS()---------------------------------------------------------------------------------------Juris 30Rasma 10Liene 9Varis 29
4
select VALUE(A).FIRST_NAME, TREAT(VALUE(A) STUDENT).YERS()from PERSONS A;VALUE(A).FIRST_NAME TREAT(VALUE(A) STUDENT).YEARS()-------------------- -----------------------------------------------------------------------JurisRasma 10Liene 9Varis
select VALUE(A).SURNAME, TREAT(VALUE(A) STUDENT).FACULTY from PERSONS A;VALUE(A).SURNAME TREAT(VALUE(A) STUDENTS).FACULTY-------------------- ----------------------------------------------------------------------KoksLapa DITFCelms DITFSakne
5