Java继承与多态深入解析

需积分: 10 3 下载量 197 浏览量 更新于2024-07-29 收藏 185KB PPT 举报
"Java继承和多态是面向对象编程中的核心概念,本资源详细讲解了这些概念,由教师丁月华讲解,通过Email ding_mickey@sina.com可联系。课程内容包括父类与子类的关系、super关键字的使用、方法覆盖、重载、对象类Object的tostring方法、多态性、动态绑定、对象转换、instanceof运算符的应用、ArrayList类、自定义栈类的实现,以及protected数据和方法、final类、方法和变量的特性。" Java的继承和多态是其面向对象特性的两个关键组成部分,它们帮助开发者构建更强大、更具复用性的代码。 9.1 引言 继承允许创建一个新类(子类)作为现有类(父类)的扩展。在Java中,使用`extends`关键字实现继承。子类继承了父类的所有非私有成员,包括字段和方法,同时可以添加自己的字段和方法,增强了代码的复用性和模块化。 9.2 父类和子类 以`GeometricObject`为例,它包含颜色、填充状态和创建日期等属性,以及相应的方法。子类如`Circle`可以继承这些属性和方法,并根据需求进行扩展或覆盖。 9.3 使用`super`关键字 `super`关键字用于访问父类的成员,包括构造器、字段和方法。例如,子类可以使用`super.getColor()`来调用父类的`getColor`方法。 9.4 方法覆盖 覆盖是指子类重写父类的方法,提供不同的实现。这允许子类对父类的行为进行定制。方法覆盖必须保持方法签名的一致性,即方法名、返回类型和参数列表必须相同。 9.5 覆盖与重载 覆盖是关于继承的概念,而重载发生在同一个类中,指的是同一类中有多个同名但参数列表不同的方法。 9.6 对象类`Object`和`toString`方法 所有Java类都默认继承自`Object`类,`toString`方法返回对象的字符串表示。子类可以覆盖此方法,提供更具体的对象描述。 9.7 多态性、动态绑定和一般程序设计 多态性是面向对象的关键特性,允许使用父类引用指向子类对象,使得代码更加灵活。动态绑定是在运行时决定方法调用,使得子类的覆盖方法得以执行。 9.8 对象转换和`instanceof`运算符 `instanceof`用于判断对象是否是特定类的实例或其子类实例。对象转换(向上转型和向下转型)允许在不同类之间操作,保证了多态性。 9.9 数组线性表`ArrayList`类 `ArrayList`是Java集合框架的一部分,实现了一个动态大小的数组,支持添加、删除和修改元素,提供了便利的API供开发者使用。 9.10 自定义栈类 通过继承或实现接口,可以创建自定义的栈数据结构,满足特定的业务需求。 9.11 `protected`数据和方法 `protected`权限修饰符允许子类访问父类的受保护成员,但限制了包外的直接访问。 9.12 `final`类、方法和变量 `final`关键字用于声明不可变的类、方法和变量,保证了类的不可继承性、方法的不可覆盖性和变量的不可修改性,常用于实现设计模式或优化性能。 这个学习资源深入浅出地讲解了Java中继承和多态的概念及其应用,对于理解和掌握Java面向对象编程具有极大的帮助。
2017-03-02 上传
实验1 类的定义、对象数组的使用 1. 定义一个学生类(Student), 属性有 1)非静态属性String studentNumber 2)非静态属性String studentName 3)非静态属性int markForMaths 4)非静态属性int markForEnglish 5)非静态属性int markForScience 方法有: 1)构造方法Student(String number, String name) 2)构造方法Student() 3)String getNumber() 4)String getName() 5)void enterMarks(int markForMaths, int markForEnglish, int markForScience) 6)int getMathsMark() 7)int getEnglishMark() 8)int getScienceMark() 9)double calculateAverage() 10)String toString() 返回学生信息,包括学号、姓名、数学成绩、英语成绩、科学成绩、平均成绩。 注意:为了保证calculateAverage返回double类型,需要把三个分数的和除以3.0,而不是3. 另外,分数的初始值是什么?如果每个分数初始值为0,会造成混淆,分数为0表示还没有输入分数,还是分数确实为0?有更好的初始值吗? 编写Student类,并且编写一个StudentTest类,对Student类进行测试。 StudentTest类运行效果如下: 请输入学生学号:2011211301 请输入学生姓名:王晓 请输入学生三门课成绩(数学,英语,科学):88,79,90 学生信息如下: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 2.定义一个StudentList类用来存储Student对象 属性有 1)Student[] list; //list存储学生对象 2)int total; //学生总人数 方法有: 1)StudentList(int length) //length是数组长度 2)boolean add(Student stu) //增加stu到数组中,成功,返回true,否则false 3)boolean remove(int no) //删除第no个数组元素,删除成功,返回true,否则false 4)boolean remove(Student number) //删除学号为number的学生,删除成功,返回true,否则false 5)boolean isEmpty() //判断数组是否为空,若是,返回true,否则false 6)Student getItem(int no) //返回第no个学生 7)Student getItem(Student number) //返回学号为number的学生,若该生不存在,返回null。 8) int getTotal() 返回学生总人数 编写StudentList类,并且编写一个StudentListTest类,对StudentList类进行测试。 StudentListTest类运行效果: 菜单如下,请输入 1~8代表您要执行的操作: 1. 增加1个学生 2. 根据学号删除学生 3. 根据位置删除学生 4. 判断是否为空 5.根据位置返回学生 6.根据学号返回学生 7. 输出全部学生信息 8.退出程序 请输入您的操作:1 请输入学生信息: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 ---目前有1个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 请输入您的操作:1 学号:2011211311 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 ---目前有2个学生,信息为---: 学号:2011211301 姓名:王晓 数学成绩:88 英语成绩:79 科学成绩:90 平均成绩:85.66666666666667 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:5 请输入学生位置:10 对不起,没有对应的学生 请输入您的操作:5 请输入学生位置:2 学生信息如下: 姓名:李辉 数学成绩:80 英语成绩:79 科学成绩:93 平均成绩:84.0 请输入您的操作:3 请输入要删除第几个学生:2 删除成功 ---目前有1个学生,信息为: