### JAVA程序考试教程SL275-2(华信内部资料) #### 第六章 类设计 本章节主要探讨了JAVA中的类设计概念,特别是聚焦于继承、方法覆盖(Override)、方法重载(Overload)以及多态等核心知识点。下面我们将深入分析这些概念及其在JAVA中的应用。 ##### 继承 继承是面向对象编程的一个关键特性,允许我们创建一个新类(子类)来继承现有类(父类)的属性和方法。这不仅减少了代码冗余,还提高了代码的复用性和维护性。 **语法格式**: ```java <修饰符> class <子类名称> [extends 父类] { …… } ``` **注意点**: - JAVA支持单继承,即一个子类只能直接继承一个父类。 - 所有的类最终都直接或间接地继承自`Object`类。 - 一个父类可以有多个子类,但一个子类只能有一个直接父类。 **示例**: 假设我们有两个类,`Employee` 和 `Manager`,其中`Manager`继承自`Employee`。 **单继承示例**: ```java class Employee { String name; int age; public Employee(String name, int age) { this.name = name; this.age = age; } } class Manager extends Employee { String department; public Manager(String name, int age, String department) { super(name, age); // 调用父类构造方法 this.department = department; } } ``` ##### 访问控制 在JAVA中,有四种访问修饰符:`public`、`protected`、`default`(包私有)和`private`,它们控制着类、方法和字段的可访问范围。 ##### 方法覆盖(Override) 当子类提供了一个与其父类相同的名称、返回类型以及参数列表的方法时,就发生了方法覆盖。通过这种方法,子类可以改变或扩展父类的行为。 **覆盖规则**: - 子类覆盖的方法必须与父类的方法具有相同的方法名、参数列表和返回类型。 - 子类覆盖方法的访问级别不能低于父类方法的访问级别。 - 方法覆盖仅发生在子类与父类之间。 **示例**: ```java class Employee { String no; String name; int year; public String getDetails() { return no + "/" + name + "/" + year; } } class Manager extends Employee { String dept; public String getDetails() { // 覆盖父类方法 return super.getDetails() + "/" + dept; } } ``` ##### 方法重载(Overload) 方法重载允许我们在同一个类中定义多个同名方法,但参数列表必须有所不同(类型、数量或顺序)。这有助于实现相似的功能但具有不同的行为。 **重载规则**: - 方法名必须相同。 - 参数列表至少有一项不同。 - 返回类型和修饰符不受限制。 - 调用哪个方法取决于传递的实际参数。 **示例**: ```java public class Math { public int sum(int n1, int n2) { return n1 + n2; } public int sum(int n1, int n2, int n3) { return n1 + n2 + n3; } public double sum(double n1, double n2) { // 重载 return n1 + n2; } } ``` ##### 比较覆盖和重载 | | 方法覆盖 (Override) | 方法重载 (Overload) | |----------|---------------------------------------------|------------------------------------------------| | 方法名 | 相同 | 相同 | | 参数列表 | 相同 | 必须不同 | | 返回类型 | 相同 | 可以不同 | | 访问权限 | 大于等于被覆盖方法 | 无特殊要求 | | 位置 | 在子类中覆盖父类 | 可以在同一类中或不同类中 | | 次数 | 覆盖一次 | 重载多次 | | 异常 | 不能抛出更多异常 | 无特殊要求 | ##### this关键字 `this`关键字用于引用当前类的对象,通常用于解决局部变量和成员变量同名问题,或者调用类内的另一个构造函数。 **示例**: ```java public class Employee { private String id; private String name; public Employee() {} public Employee(String id, String name) { this.id = id; // 使用this引用成员变量 this.name = name; } } ``` ##### super关键字 `super`关键字用于访问父类的属性和方法,尤其是在子类构造函数中调用父类构造函数时非常有用。 **示例**: ```java class Employee { String name; String id; public Employee(String name, String id) { this.name = name; this.id = id; } } class Manager extends Employee { String department; public Manager(String name, String id, String department) { super(name, id); // 调用父类构造方法 this.department = department; } } ``` ##### 对象构造和初始化步骤 对象的构造过程包括以下步骤: 1. **分配内存并进行默认初始化**:为对象分配内存空间,并对基本类型的成员变量进行默认值初始化。 2. **实例变量初始化**: - 绑定构造方法参数。 - 如果构造方法中包含`this`调用,则执行相应的重载构造方法。 - 显示或隐式调用父类构造方法。 - 进行实例变量的显式初始化。 - 执行构造方法主体中的代码。 ##### 思考 为什么必须在子类的构造器中加入调用父类的构造方法? - **确保父类正确初始化**:通过在子类构造方法中显式调用父类构造方法,可以确保父类状态正确初始化,这对于对象的完整性和正确性至关重要。 - **避免编译错误**:如果父类定义了构造方法而没有提供无参构造方法,那么子类构造方法中就必须明确调用父类构造方法,否则编译器将报错。 ##### 多态 多态是面向对象编程的另一个核心特性,允许子类对象以父类的形式出现。这意味着可以通过父类引用变量来引用子类对象,并调用子类中覆盖的方法。多态提高了代码的灵活性和可扩展性。 **示例**: ```java class Animal { void sound() { System.out.println("Animal makes sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks"); } } class Cat extends Animal { @Override void sound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Dog(); // 多态 myAnimal.sound(); // 输出 "Dog barks" } } ``` 通过上述知识点的学习,我们可以更加熟练地掌握JAVA面向对象编程的核心概念和技术细节,这对于开发高效、灵活且可维护的JAVA应用程序至关重要。
- 铜羽2013-07-17不错很有帮助,谢谢分享!
- chopperking2013-08-27不错很有帮助,谢谢分享!但内容旧了
- 粉丝: 2
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程