1. 程式人生 > 實用技巧 >JAVA面向物件的三大特徵

JAVA面向物件的三大特徵

JAVA面向物件的三大特徵

封裝、繼承、多型

1. 封裝

  1. 定義:

    ​ 就是將一些特定的程式碼進行歸類到一個類中或者一個方法中,讓其可以支援呼叫,比如我們寫的方法其實就是一種簡單的封裝。讓一個方法完成一個特定的功能,當需要此功能時,直接呼叫對應的方法即可。

  2. 示例:

    public class Demo01 {
    
      	// 定義好一個方法
        public void test01(){
            System.out.println("我是封裝方法...");
        }
        
        public static void main(String[] args) {
            // 需要使用的時候直接呼叫
            Demo01 demo01 = new Demo01();
            demo01.test01();
        }
    }
    
    
  3. 好處:

    ​ 讓程式碼更加清晰有條理,利於維護。減少了不必要的重複性程式碼的編寫,當使用到之前已經定義過的方法時,直接呼叫寫好的方法即可,不需要再重新編寫對應的程式碼。從一定程度上來說,也可以提高開發的效率。

2. 繼承

  1. 定義:

    ​ 將一些類的共性提取出來,然後統一放在一個類中,當有其他類需要執行屬性的時候,直接繼承該類就可以獲得這些屬性,不需要在重新去定義一次。

  2. 示例:

    • 定義一個父類Person,裡面定義好一個方法

      public class Person {
          public void pserson(){
              System.out.println("person...");
          }
      }
      

    • 定義一個子類Teacher,繼承父類Person

      public class Teacher extends Person {
          public static void main(String[] args) {
              Teacher teacher = new Teacher();
              // 繼承了父類之後就擁有了父類的可繼承屬性
              teacher.pserson();
          }
      }
      
  3. 好處:

    ​ 減少了重複程式碼的編寫,利於程式後期的維護。

  • 注意:

    • 當子類繼承父類之後並且重寫了子類自己的構造方法(重寫執行時呼叫該類時,會自動呼叫類中的構造方法),所以在程式執行時會自動去先呼叫父類的構造方法然後再去呼叫子類的構造方法(先有父親才有兒子)。

    • 子類的構造方法中會程式會自動的新增super(),但是當父類中的構造方法有引數的時候則需要手動新增super(引數1,引數2)

    • super();這個語句必須是構造方法中的第一個java語句

    • 如果子類中需要訪問父類中的方法,可以 super.method(方法名)

  • 繼承的特點

    • java的的繼承的單繼承的,不支援多繼承關係,也就是說一個子類只能有一個直接父類。

      但是一個父類可以擁有許多的子類。

3. 多型

  1. 定義:

    • 父類引用指向子類物件(父類的一種型別,子類的多種表現型態)。

    • 格式:

      ​ 父類名稱 物件名 = new 子類名稱();

    • 或者:

      ​ 介面名稱 物件名 = new 實現類名稱();

  2. 示例:

    父類A:

    public class A {
        public void method() {
            System.out.println("父類方法");
        }
        public void methodFu() {
            System.out.println("父類特有方法");
        }
    }
    

    子類B:

    public class Zi extends Fu {
        @Override
        public void method() {
            System.out.println("子類方法");
        }
    }
    

    多型:

    public class MultiDemo {
        public static void main(String[] args) {
            // 物件型別是父類A的,但是實際new的時候是子類B
            A a = new B();
            a.method();
            a.methodFu();
        }
    }
    

    • 向上造型

      ​ 向上造型之後就不能再使用原來子類中特有的方法。

      • 格式:

        ​ 父類名稱 物件名 = new 子類名稱();

      • 或者:

        ​ 介面名稱 物件名 = new 實現類名稱();

    • 向下造型

      ​ 如果想將之前已經向上造型的物件重新還原回到之前的型別,使之可以呼叫子類中特有的方法,那就可以使用向下造型。

      • 格式

        需要還原的物件型別 物件名 = (需要還原的物件型別 )需要還原的物件名;

        需要注意的是:

        ​ 這個向下造型不一定成功,因為在執行向下造型的時候“需要還原的物件型別”的型別必須與之前向下造型的時候子類型別一致,否則將轉換失敗(在編譯器的時候不會報錯,在執行期時會出現錯誤)。

        • 所以在轉換之前,一個先使用 instanceof 這個方法判斷一下。