在Java中,有三種常見的面向?qū)ο缶幊?(OOP) 概念:重寫、重載和隱藏封裝。
重寫 (Override) 是指子類通過繼承父類的方法,在自己的類中重新定義一遍該方法。重寫發(fā)生在兩個(gè)類之間,其中一個(gè)是子類,另一個(gè)是父類。
<code>public class Animal { public void makeSound() { System.out.println("Animal makes sound."); } } public class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow!"); } } public class Example { public static void main(String[] args) { Animal animal = new Animal(); animal.makeSound(); // 輸出 "Animal makes sound." Cat cat = new Cat(); cat.makeSound(); // 輸出 "Meow!" } } </code>
在上述示例中,Cat 類重寫 (Override) 了 Animal 類的 makeSound() 方法。在調(diào)用 Cat 類的 makeSound() 方法時(shí),會(huì)輸出 "Meow!",而不是 Animal 類的 makeSound() 方法中輸出的 "Animal makes sound."。
重載 (Overload) 是指在同一個(gè)類中,為一個(gè)方法定義多個(gè)簽名。這些簽名應(yīng)該有不同的參數(shù)類型和/或參數(shù)數(shù)量。當(dāng)使用重載函數(shù)時(shí),編譯器會(huì)自動(dòng)選擇最匹配的函數(shù)進(jìn)行調(diào)用。
<code>public class Calculator { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; } } public class Example { public static void main(String[] args) { Calculator calculator = new Calculator(); System.out.println(calculator.add(1, 2)); // 輸出 3 System.out.println(calculator.add(1, 2, 3)); // 輸出 6 } } </code>
在上述示例中,Calculator 類中的 add() 方法被重載了兩次,分別有兩個(gè)參數(shù)和三個(gè)參數(shù)。在使用 add() 方法時(shí),編譯器會(huì)自動(dòng)匹配最匹配的 add() 方法。
隱藏封裝 (Encapsulation) 的意義是:把類設(shè)置為私有,使得只有類內(nèi)部的代碼可以訪問它。這個(gè)意義被稱為數(shù)據(jù)隱藏 (Data Hiding)。為了保證類中的私有成員不會(huì)被外部程序訪問,我們需要以訪問修飾符 private 來定義這些成員。
<code>public class Person { private int age; public void setAge(int age) { this.age = age; } public int getAge() { return age; } } public class Example { public static void main(String[] args) { Person person = new Person(); person.setAge(20); System.out.println("Age: " + person.getAge()); } } </code>
在上述示例中,Person 類中的 age 成員被隱藏封裝。它只能在 Person 類中被訪問,因?yàn)樗欢x為私有成員。不過,通過 setAge() 和 getAge() 方法可以在外部訪問 age 成員,但這些方法已經(jīng)封裝了對(duì) age 成員的訪問,并且設(shè)定了 get 和 set 方法的規(guī)則,所以可以在外部使用。