### Java面向对象思想总结 #### 一、面向对象三大特征 **1. 封装** - **定义**:封装是指将类的属性隐藏起来,仅通过公共方法来访问这些属性的过程。这种做法不仅可以保护数据不被非法修改,还可以在方法中加入逻辑判断,确保数据的有效性。 - **实现步骤**: - 将类的属性设为`private`。 - 提供公共方法(如`setX()`和`getX()`)来进行属性的读写操作。 - 在构造方法中通过调用setter方法来初始化对象属性,确保真正的封装。 ```java public class MyDate { private int year; private int month; private int day; public MyDate(int year, int month, int day) { setYear(year); // 使用setter方法 setMonth(month); setDay(day); } public void setYear(int year) { if (year > 0) { this.year = year; } else { throw new IllegalArgumentException("Year must be positive."); } } // 其他getter和setter方法 } ``` **2. 继承** - **概念**:继承是一种“is-a”的关系,表示一个类是另一个类的扩展或变体。Java使用`extends`关键字来声明一个类继承自另一个类。 - **特性**: - 单继承:Java只支持单一继承,即一个类只能直接继承一个父类。 - 可继承内容:除了私有成员和构造方法之外,其他所有成员都可以被子类继承。 - 静态成员:虽然静态成员也可以被继承,但在子类中仍然属于父类。 - **示例代码**: ```java public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + " is eating."); } } public class Dog extends Animal { public Dog(String name) { super(name); } @Override public void eat() { System.out.println(name + " is eating dog food."); } } ``` **3. 多态** - **概念**:多态是指一个事物具有多种形态的能力。它允许我们使用相同的接口来处理不同的类的对象。 - **多态的几种形式**: - 基本类型的多态:如整型的自动提升。 - 方法的多态:包括方法重载(overloading)和方法重写(overriding)。 - 类或接口的多态:如`Person p = new Teacher();` 或 `Person p = new PersonImpl();`。 - 参数的多态:涉及到类型自动提升,本质上是基本类型或类和接口的多态。 - **两个重要定理**: - 如果把子类对象当作父类对象来看,则只能访问父类中定义的属性和方法。 - 如果子类覆盖了父类的方法,那么把子类对象当作父类对象来看时,调用该方法实际上是调用了子类中覆盖的方法。 - **示例代码**: ```java public class Person { public void sayHello() { System.out.println("Hello from Person"); } } public class Teacher extends Person { @Override public void sayHello() { System.out.println("Hello from Teacher"); } } public class Test { public static void main(String[] args) { Person p = new Teacher(); p.sayHello(); // 输出"Hello from Teacher" } } ``` **3.3 注意事项** - 当引用变量指向子类对象时,只能访问父类中定义的属性和方法。 - 若要访问子类特有的属性或方法,需要进行类型转换。 - 若要访问已被子类覆盖的方法,可以在子类中使用`super`关键字。 **3.4 instanceof 关键字** - **作用**:用于判断一个对象是否是某个类的实例,或者是否是某个类的子类的实例。 - **示例代码**: ```java public void test(Object obj) { if (obj instanceof Person) { Person p = (Person) obj; // 进行其他操作 } } ``` #### 二、重写 - **概念**:重写是在子类中重新定义父类中的方法,以适应子类特定的需求。 - **规则**: - 方法名必须相同。 - 参数列表必须相同。 - 返回类型必须相同或为父类返回类型的子类(从J2SE 5.0开始)。 - 访问权限不能小于父类方法的访问权限。 - 抛出的异常类型不能大于父类方法抛出的异常类型。 - **示例代码**: ```java public class Bird { protected String name; public Bird(String name) { this.name = name; } public Bird getCopied() { return new Bird(name); } } public class Chicken extends Bird { protected String crest; public Chicken(String name, String crest) { super(name); this.crest = crest; } @Override public Chicken getCopied() { // 重写了返回类型 return new Chicken(name, crest); } } ``` #### 三、static - **概念**:`static`关键字用于声明类的成员变量或方法是静态的,意味着它们与类关联而非与类的实例关联。 - **用途**: - 修饰属性、方法、内部类和初始化块。 - 静态变量存储在方法区内存区域,与实例对象分开存储。 - 实例变量则随每次对象创建而分配内存。 - **区别**: - **静态变量**:在内存中只有一个副本,由类的所有实例共享。 - **实例变量**:每个对象拥有独立的副本。 - **示例代码**: ```java public class MyClass { private static int count = 0; // 静态变量 public MyClass() { count++; // 每次创建新对象时计数器加一 } public static int getCount() { return count; } } ``` 通过以上总结,我们可以看到Java面向对象编程的核心思想包括封装、继承和多态等几个关键概念。这些概念不仅有助于构建结构良好、易于维护的软件系统,而且还能帮助开发者更好地理解如何利用Java语言的特点来设计高效、灵活的应用程序。
剩余16页未读,继续阅读
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 非常好的影评系统源代码100%好用.zip
- 基于SpringBoot的“医疗服务系统”的设计与实现(源码+数据库+文档+PPT).zip
- 基于SpringBoot的“校园闲置物品交易网站”的设计与实现(源码+数据库+文档+PPT).zip
- 基于opencv aruco模块的ROS2 aruco标记检测
- LabVIEW实现WiFi通信【LabVIEW物联网实战】
- 简单-基于HTML,css,php,mysql的酒店管理系统的网页实现
- 企业ESG表现与创新(2009-2023年)回归代码.do
- 【微信小程序源代码】基于微信小程序的垃圾分类(完整前后端+mysql+LW).zip
- 微信小程序源码实验室管理微信小程序-服务端-毕业设计.zip
- 企业ESG表现与创新-来自A股上市公司的证据.pdf