Java提供了4種存取修飾符private ,不寫(default), protected , public
來修飾類別及類別的內部結構,體現類別及內部結構在被存取時的可見性(visible)的大小
減少程式碼的冗餘,也方便功能的擴展,先有一個類別(子)去繼承另一個類別(父),而有了父類與子類的關係,子類可以使用父類的所有功能,且子類還可以在父類的基礎之上擴展其他功能 => is-a 關係(子類 is a 父類)
package day08.oop;
class Person {
int age;
int name;
public Person() {
this.age = 1;
}
public void eat() {
System.out.println("人吃飯");
}
public void sleep() {
System.out.println("人睡覺");
}
}
class Student extends Person {
int age;
public Student() {
this.age = 10;
}
@Override
public void eat() {
System.out.println("學生要吃營養的食物");
}
@Override
public void sleep() {
System.out.println("學生要睡飽才會長高");
}
public void study() {
System.out.println("學生認真學習!");
}
}
public class PolymorphismTest {
public static void main(String[] args) {
Person p1 = new Student();
p1.eat();
p1.sleep();
// 會存取到父類別的屬性
System.out.println("age="+p1.age);
System.out.println("====================");
// 如何才能使用 p1變數 存取子類別特有的屬性與方法?
// 使用向下轉型:使用強制轉型符
if (p1 instanceof Student) {
// 為了避免轉型失敗拋出ClassCastException,先用 instanceof 關鍵字判斷
Student student = (Student) p1;
// 會存取到子類別的屬性
System.out.println("age="+student.age);
student.study();
student.sleep();
}
}
}
輸出結果:
學生要吃營養的食物
學生要睡飽才會長高
age=1
====================
age=10
學生認真學習!
學生要睡飽才會長高
PS. 編譯時期看左邊、執行時期看右邊