面向对象三大特性:封装、继承、多态。
1. 封装
把字段设为 private,通过 getter/setter 方法访问,可以控制字段的读写。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class BankAccount { private double balance;
public double getBalance() { return balance; }
public void deposit(double amount) { if (amount > 0) { balance += amount; } }
public void withdraw(double amount) { if (amount > 0 && amount <= balance) { balance -= amount; } } }
|
1 2 3 4 5 6 7 8 9 10
| public class Main { public static void main(String[] args) { BankAccount account = new BankAccount(); account.deposit(1000); account.withdraw(300); System.out.println(account.getBalance());
} }
|
好处:外部只能通过方法操作,避免了非法数据(比如余额变负数)。
2. 继承
用 extends 让一个类继承另一个类,子类自动获得父类的字段和方法。
1 2 3 4 5 6 7 8
| public class Animal { String name;
public void eat() { System.out.println(name + "在吃东西"); } }
|
1 2 3 4 5 6
| public class Dog extends Animal { public void bark() { System.out.println(name + "汪汪叫"); } }
|
1 2 3 4 5 6 7 8
| public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.name = "旺财"; dog.eat(); dog.bark(); } }
|
要点:
- Java 是单继承,一个类只能继承一个父类
- 所有类默认继承
Object
3. 方法重写(override)
子类重写父类的方法,用 @Override 标注。
1 2 3 4 5
| public class Animal { public void makeSound() { System.out.println("动物叫"); } }
|
1 2 3 4 5 6
| public class Dog extends Animal { @Override public void makeSound() { System.out.println("汪汪"); } }
|
1 2 3 4 5 6
| public class Cat extends Animal { @Override public void makeSound() { System.out.println("喵喵"); } }
|
1 2 3 4 5 6 7 8 9
| public class Main { public static void main(String[] args) { Animal dog = new Dog(); dog.makeSound();
Animal cat = new Cat(); cat.makeSound(); } }
|
4. super 关键字
super 指父类,用来调用父类的构造方法或方法。
1 2 3 4 5 6 7 8 9 10 11
| public class Animal { String name;
public Animal(String name) { this.name = name; }
public void makeSound() { System.out.println("动物叫"); } }
|
1 2 3 4 5 6 7 8 9 10 11
| public class Dog extends Animal { public Dog(String name) { super(name); }
@Override public void makeSound() { super.makeSound(); System.out.println(name + "汪汪"); } }
|
1 2 3 4 5 6 7 8
| public class Main { public static void main(String[] args) { Dog dog = new Dog("旺财"); dog.makeSound(); } }
|
5. 多态
父类引用指向子类对象,调用方法时执行子类的重写方法。同一个调用,表现不同,就是多态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Main { public static void main(String[] args) { Animal a1 = new Dog(); Animal a2 = new Cat();
a1.makeSound(); a2.makeSound();
Animal[] animals = {new Dog(), new Cat(), new Dog()}; for (Animal a : animals) { a.makeSound(); } } }
|
6. final 关键字
final 修饰类:不能被继承
final 修饰方法:不能被重写
final 修饰变量:值不能改(常量)
1 2 3 4 5 6 7 8 9
| public class Demo { public static void main(String[] args) { final int MAX = 100;
final String name = "Java"; } }
|
小结
- 封装:
private 字段 + getter/setter,保护数据
- 继承:
extends 复用代码,单继承
- 多态:父类引用指向子类对象,方法调用看实际对象
super 调用父类,final 禁止继承/重写/修改