Java的三大特性是面向对象编程的核心概念:封装、继承和多态。这些特性为软件开发提供了强大的工具,帮助创建灵活、可维护和可扩展的代码结构。
1. 封装(Encapsulation)
封装是将一个对象的状态(数据)和行为(方法)绑定在一起,并通过访问控制(如私有、公共、受保护等)来隐藏对象的内部实现细节,只暴露必要的接口供外界使用。这不仅可以提高数据的安全性,还能简化代码维护。
优点
- 提高安全性:防止外部代码直接修改对象内部数据。
- 简化接口:外部只需调用提供的公共方法,无需了解内部实现。
示例
public class Person {private String name; // 私有属性private int age; // 私有属性public String getName() { return name; } // 公共方法获取namepublic void setName(String name) { this.name = name; } // 公共方法设置namepublic int getAge() { return age; } // 公共方法获取agepublic void setAge(int age) { this.age = age; } // 公共方法设置age
}
在这个例子中,name和age是私有属性,外界只能通过getName、setName、getAge和setAge方法来访问和修改这些属性。
2. 继承(Inheritance)
继承允许创建一个新类(子类)继承现有类(父类)的属性和方法。这促进了代码复用,并可以扩展父类的功能。
优点
- 代码复用:子类可以直接使用父类的方法和属性。
- 扩展性:可以在子类中添加新的方法或修改现有方法以满足特定需求。
示例
class Animal {protected void eat() {System.out.println("动物吃东西");}
}
class Dog extends Animal {public void bark() {System.out.println("狗叫");}
}
Dog dog = new Dog();
dog.eat(); // 使用父类的方法
dog.bark(); // 调用子类的方法
在这个例子中,Dog类继承了Animal类的eat方法,并添加了bark方法。
3. 多态(Polymorphism)
多态是指同一个方法在不同的对象上可以表现出不同的行为。它分为两种形式:
多态的形式
- 编译时多态(静态多态):通过方法重载实现,编译器在编译阶段根据参数列表选择调用哪个方法。
- 运行时多态(动态多态):通过方法重写实现,运行时根据对象的实际类型调用相应的方法。
实现方式
- 方法重写(Override):子类提供一个与父类中具有相同名称和参数列表的方法实现。当通过父类引用调用该方法时,实际执行的是子类的实现版本。
- 方法重载(Overload):在同一个类中定义多个名称相同但参数列表不同的方法。尽管方法重载与多态性不是直接相关,但它提供了一种灵活的方式来处理不同类型的参数,从而增强了多态性。
- 抽象类和接口:定义了一组方法但不提供具体实现,子类或实现类必须提供这些方法的具体实现。
优势
- 代码复用:使用统一的代码来处理不同类型的对象,减少了代码的重复。
- 扩展性:程序更容易扩展,可以通过添加新的子类来扩展程序的功能。
- 灵活性:允许在运行时决定调用哪个方法,提高了程序的灵活性。
弊端
- 不能调用子类的特有方法:需要使用强制类型转换,可能会导致ClassCastException(类转换异常)。为了避免这种情况,可以使用instanceof关键字进行类型校验。