Ciekawsze przykłady z zakresu SCJP i przesłaniania funkcji (ang Overriding)
Przykład 1
class A {
private void method1() {
}
}
class B extends A {
/**
* Metoda nie przesłonić metody method1() z klasy A
* ponieważ nie można przesłaniać metody która nie jest dziedziczona
* If a method can't be inherited, you cannot override it.
*/
public void method1() {
// tak nie można - błąd kompilacji
//super.method1();
}
}
Przykład 2
class A {
void test() {
System.out.println("A");
}
}
class B extends A {
void test() {
System.out.println("B");
}
}
public class OverrideTest {
public static void main(String[] args) {
A var = new A();
var.test();
var = new B();
var.test();
/*
* Rezultat wykoniania:
* A
* B
*/
}
}
Przykład 3 – nie dziedziczymy funkcji statycznych i właściwości obiektu
class A {
static void test() {
System.out.println("A");
}
}
class B extends A {
static void test() {
System.out.println("B");
}
}
public class OverrideTest {
public static void main(String[] args) {
A var = new A();
var.test();
var = new B();
var.test();
/*
* Rezultat wykoniania:
* A
* A
*
* Ponieważ dziedziczone są tylko metody.
* Polimorfizm nie dotyczy metod statycznych i właściwości obiektu (ang Properties)
*/
}
}
Cytat z książki PRZYGOTOWANIE DO CERTYFIKACJI SCJP 6 autorstwa Mariusza Lipińskiego:
O tym, jakie metody możemy wywołać z użyciem danej referencji decyduje typ referencji a nie typ wskazywanego przez nią obiektu, ale to, która implementacja danej metody zostanie wybrana zależy już od faktycznie wskazywanego obiektu.
COMMENTS
No Comments