封装
封装就是“把数据和操作数据的方法打包在一起”,同时隐藏内部的实现细节。比如将字段用private修饰,只暴露getter和setter。
- 防止外部随意修改对象的内部状态。
- 保持代码的安全性和清晰性。
继承
子类可以继承父类的属性和方法(使用 Extends 来继承)。
1 2 3 4 5 6 7 8 9 10 11 12
| public class Animal { void makeSound() { System.out.println("Some sound..."); } }
public class Dog extends Animal { void bark() { System.out.println("Woof!"); } }
|
多态
编译时多态
也叫方法重载(Overloading),是指在编译期间就已经确定了哪个方法会被调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class Calculator { int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; } }
|
编译器根据你传入的参数类型和个数,在编译阶段 就能决定调用哪个方法。
运行时多态
也叫 方法重写(Overriding),是指在运行期间才能决定调用哪个方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Animal { void makeSound() { System.out.println("Some animal sound"); } }
class Dog extends Animal { @Override void makeSound() { System.out.println("Woof!"); } }
class Cat extends Animal { @Override void makeSound() { System.out.println("Meow!"); } }
Animal a = new Dog(); a.makeSound();
a = new Cat(); a.makeSound();
|
虽然变量类型是 Animal,但真正调用的是对象 Dog 或 Cat 中的 makeSound() 方法。
接口和抽象类
抽象类
抽象类是一种不能直接创建对象的类,它是为了被继承而存在的。子类是否必须实现父抽象类的抽象方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| abstract class Animal { String name;
abstract void makeSound();
void eat() { System.out.println(name + " is eating."); } }
class Dog extends Animal { void makeSound() { System.out.println("Woof!"); } }
public class Main { public static void main(String[] args) { Animal a = new Dog(); a.name = "Buddy"; a.eat(); a.makeSound(); } }
|
接口
接口(interface)是一些方法的集合,它定义了类应该遵守的一组规范或能力。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| interface Flyable { void fly(); }
class Bird implements Flyable { public void fly() { System.out.println("Bird is flying"); } }
class Airplane implements Flyable { public void fly() { System.out.println("Airplane is flying"); } }
Flyable f1 = new Bird(); Flyable f2 = new Airplane(); f1.fly(); f2.fly();
|
一个类可以实现多个接口:
1 2 3 4 5 6 7 8 9 10 11 12
| interface Flyable { void fly(); }
interface Swimmable { void swim(); }
class Duck implements Flyable, Swimmable { public void fly() { System.out.println("Duck flies"); } public void swim() { System.out.println("Duck swims"); } }
|
此外
- 接口中可以定义 default 方法,提供默认实现。
- 接口中可以定义 static 方法,不属于实现类,直接通过接口调用。
- 接口中可以定义 private 方法,用于接口内部复用代码。
Java关键字
- 访问控制
- public:公有,所有地方都可以访问
- private: 私有,只能在本类中访问
- protected: 受保护,同包 + 子类可访问
- final:表示不可修改:类不能继承、方法不能重写、变量不能变值