本文共 3594 字,大约阅读时间需要 11 分钟。
面向对象编程(Object-Oriented Programming, OOP)是一种将程序设计成具有对象的编程范式。它的核心思想是通过类和对象来 organization, abstraction, 和 encapsulation,简化复杂的任务。
在 Java中,一个类可以被视为一个蓝图或模板,描述对象的属性和行为。通过继承( inheritance )来自已有的类,可以创建新的类,从而实现代码的复用( reuse )。
需要注意的是,Java中的对象由**成员变量(fields)和成员方法(methods)**组成。成员变量定义了对象的特征,而成员方法定义了对象的行为。通过调用构造函数(constructor),可以根据模板创建具体的对象实例。
封装性是面向对象编程的一项核心概念,它意味着将数据和操作集中在一个单元中,即类。对于一个类来说,这意味着通过访问控制(access specifier),可以限制成员变量和成员方法的使用方式。
封装的另一个重要意义在于数据安全。例如,类中的成员变量可以被类的方法访问或修改,而外部类无法直接访问这些成员变量,除非它们被明确暴露出来。
以下是一个简单的封装示例:
public class Mobile { private String manufacturer; // 制造商 private String operatingSystem; // 操作系统 public String model; // 模型 private int cost; // 成本 public Mobile(String man, String os, String model, int cost) { this.manufacturer = man; this.operatingSystem = os; this.model = model; this.cost = cost; } public String getModel() { return this.model; }}
继承允许一个新类继承已有类的属性和行为,从而避免重复代码。通过使用已有类,我们可以专注于添加新的功能,而无需从头开始。
以下是一个继承的例子:
public class Android extends Mobile { public Android(String man, String os, String model, int cost) { super(man, os, model, cost); // 调用父类构造函数 } public String getModel() { return "这是一个Android手机 - " + model; }}
类似地,我们可以定义BlackBerry等其他移动品牌手机类。
多态使一个操作可以根据上下文产生不同结果。在Java中,多态分为两种类型:
静态多态/方法重载(Static Polymorphism/Method Overloading):
如果一个类中有多个方法具有相同的名称,但参数类型不同,则可以实现静态多态。这种多态在编译时就已经确定了。
public class OverloadSample { public void print(String s) { System.out.println("只包含String参数的方法 - " + s); } public void print(int i) { System.out.println("只包含int参数的方法 - " + i); } public void print(String s, int i) { System.out.println("包含两个参数的方法 - " + s + "-" + i); }}public class PolymDemo { public static void main(String[] args) { OverloadSample obj = new OverloadSample(); obj.print(10); obj.print("Amit"); obj.print("Hello", 100); }}
输出示例:
只包含int参数的方法 - 10只包含String参数的方法 - Amit包含两个参数的方法 - Hello-100
- **动态多态/方法重写(Dynamic Polymorphism/Method Overriding):** 动态多态在运行时决定哪个方法应该被调用。通过继承,子类可以覆盖父类的方法。 ```java public class OverridingDemo { public static void main(String[] args) { Mobile m = new Mobile("Nokia", "Win8", "Lumia", 10000); System.out.println(m.getModel()); Android a = new Android("Samsung", "Android", "Grand", 30000); System.out.println(a.getModel()); Blackberry b = new Blackberry("BlackB", "RIM", "Curve", 20000); System.out.println(b.getModel()); } }
输出示例:
LumiaThis is Android Mobile- GrandThis is Blackberry-Curve
抽象是将复杂的世界简化为易于理解和操作的概念。在Java中,抽象类可以定义接口,而不具体实现它们。抽象类可以通过继承实现。
public abstract class VehicleAbstract { public abstract void start(); public void stop() { System.out.println("停止车辆在抽象类中"); }}class TwoWheeler extends VehicleAbstract { @Override public void start() { System.out.println("开始两轮车"); }}class FourWheeler extends VehicleAbstract { @Override public void start() { System.out.println("开始四轮车"); }}public class VehicleTesting { public static void main(String[] args) { VehicleAbstract my2Wheeler = new TwoWheeler(); VehicleAbstract my4Wheeler = new FourWheeler(); my2Wheeler.start(); my2Wheeler.stop(); my4Wheeler.start(); my4Wheeler.stop(); }}
输出示例:
开始两轮车停止车辆在抽象类中开始四轮车停止车辆在抽象类中
通过理解这些概念,Java面向对象编程的核心特性可以被更好地掌握,从而在编写更高效、维护更方便的代码中得到提升。
转载地址:http://vfryk.baihongyu.com/