【1、對象轉型casting】
(1)一個基類的引用類型變量可以“指向”其子類的對象。
(2)一個基類的引用不可以訪問其子類對象新增加的成員(屬性和方法)。
(3)可以使用引用變量"instanceof 類名"來判斷該引用型變量所“指向”的對象是否屬於該類或該類的子類。
(4)子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之稱爲向下轉型(dwoncasting)。
class Animal {
public String name;
Animal(String name) {
this.name = name;
}
}
class Cat extends Animal {
public String eyesColor;
Cat(String name, String eyesColor) {
super(name);
this.eyesColor = eyesColor;
}
}
class Dog extends Animal {
public String furColor;
Dog(String name, Strung furColor) {
super(name);
this.furColor = furColor;
}
}
public class Test {
public static void main(String[] args) {
Animals animal = new Animal("name");
Cat cat = new Cat("catName", "blue");
Dog dog = new Dog("dogName", "black");
System.out.println(animal instanceof Animals); // (3)
System.out.println(cat instanceof Animals); // (3)
System.out.println(dog instanceof Animals); // (3)
System.out.println(animal instanceof Cat); // (3)
animal = new Dog("bigYellow", "yellow"); // (1)
System.out.println(animal.name);
System.out.println(animal.furColor); // (2)
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Dog);
Dog dog1 = (Dog)a; // 強制類型轉換
System.out.println(dog1.furColor);
}
}
【2、動態綁定和多態】
動態綁定是指“在執行期間(javac)(而非編譯期java)”判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
(1)要有繼承
(2)要有重寫
(3)父類引用要指向子類對象。
例子:根據Lady對象的成員變量pet所引用的不同的實際類型而調用相應的enjoy方法。
class Animal {
//
public Animal(String name) {
this.name = name;
}
//
public void sound() {
System.out.println("動物叫了……");
}
//
private String name;
}
class Cat extends Animal {
//
public Cat(String name, String eyeColor) {
super(name);
this.eyeColor = eyeColor;
}
//
public void sound() {
System.out.println("貓叫了……");
}
//
private String eyeColor;
}
class Dog extends Animal {
//
public Dog(String name, String furName) {
super(name);
this.funName = furName;
}
//
public void sound() {
System.out.println("狗叫了……");
}
//
private String furColor;
}
class Lady {
public Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}
//
public void myPetSound() {
pet.sound();
}
//
private String name;
private Animal pet;
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat("catName, "blue");
Dog dog = new Dog("dogName", "black");
Lazy lazy1 = new Lazy("lazy1", cat);
Lazy lazy2 = new Lazy("lazy2", dog);
lazy1.myPetSound();
lazy2.myPetSound();
}
}
【3、抽象類】
用abstract關鍵字來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法。
含有抽象方法的類必須被聲明爲抽象類,抽象類必須被重寫。
抽象類不能被實例化。
抽象方法只需聲明,而不需實現。
【4、Final關鍵字】
final的變量的值不能夠被改變
final的成員變量
final的局部變量(形參)
final的方法不能夠被重寫
final的類不能夠被繼承
【實例】
public class TestFinal {
public static void main(String[] args) {
}
}