JAVA05进一步讨论对象和类

上传人:宝路 文档编号:49565111 上传时间:2018-07-30 格式:PPT 页数:63 大小:706.82KB
返回 下载 相关 举报
JAVA05进一步讨论对象和类_第1页
第1页 / 共63页
JAVA05进一步讨论对象和类_第2页
第2页 / 共63页
JAVA05进一步讨论对象和类_第3页
第3页 / 共63页
JAVA05进一步讨论对象和类_第4页
第4页 / 共63页
JAVA05进一步讨论对象和类_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《JAVA05进一步讨论对象和类》由会员分享,可在线阅读,更多相关《JAVA05进一步讨论对象和类(63页珍藏版)》请在金锄头文库上搜索。

1、5 进一步讨论对象和类5.1 抽象数据类型抽象数据类型(数据结构的概念)抽象数据类型(数据结构的概念) (ADT: Abstract Data Types)(ADT: Abstract Data Types)uu由用户定义,用以表示应用问题由用户定义,用以表示应用问题 的数据模型的数据模型uu由基本的数据类型组成由基本的数据类型组成, , 并包括并包括 一组相关的操作一组相关的操作uu信息隐蔽和数据封装,使用与实信息隐蔽和数据封装,使用与实 现相分离现相分离类就是一种抽象数据类型 用一个类来代表某类事物(如动物) 特点: 封装:将实现细节隐藏,使用类时只需知其 功能,不需知道功能如何实现 继承

2、:描述类间的(抽象程度)的层次结构 ,实现代码重用(动物:哺乳动物、爬行动 物) 多态:同一个方法在不同类中运行的结果不 同(“鸣叫”在不同动物类中的表现)封装的概念 封装的含义:类的设计者把类设计成一个黑匣 子,使用者只能看见类中定义的公共变量和公 共方法,而看不见方法的具体实现细节,也不 能对类中非公共的数据进行操作。 为保护类中成员的正确性或一致性 1、在类的定义中设置对对象中的成员变量和方法进 行访问的权限(使用private、public等关键字); 2、提供一个统一供其他类引用的方法; 3、其他对象不能直接修改本对象所拥有的属性和方 法(而必须通过对象自己提供的方法)。最常见的封装

3、 将类成员设置成私有(private),外部无法 访问,只有类中的方法可访问 设置一些公开的(public)、专门访问类 成员和为类成员赋值的方法;在这些方法 中可加入一些控制过程,保证对类成员的 访问和改写是合法的。 访问类成员的方法称为getter; 改写类成员的方法称为setter;简单的封装例子: Students类 (P87页4.10题)public class Student implements Comparable private String name;/ 姓名 private int id;/ 学号 private String sex;/ 性别 private doubl

4、e creditSum;/ 学分积 private Course courses = new Course3;/ 三门课 public String getName() return name; public void setName(String name) this.name = name; public int getid() return id; public void setid(int id) this.id = id; public String getSex() return sex; public void setSex(String sex) this.sex = sex;

5、 public Course getG() return courses; public void setG(Course g) this.courses = g; public double getCreditSum() return creditSum; /给学分积赋值,也就是计算学分积 public void setCreditSum() if (courses = null) creditSum = 0; else double sum = 0; for (Course c : courses)/ 对每门课程计算学分积并加到sum中去 if (c.getScore() 94) sum

6、+= c.getCredit() * 4.0; else if (c.getScore() 89) sum += c.getCredit() * 3.8; else if (c.getScore() 84) sum += c.getCredit() * 3.6; else if (c.getScore() 79) sum += c.getCredit() * 3.2; else if (c.getScore() 74) sum += c.getCredit() * 2.7; else if (c.getScore() 69) sum += c.getCredit() * 2.2; else i

7、f (c.getScore() 64) sum += c.getCredit() * 1.7; else if (c.getScore() 59) sum += c.getCredit() * 1.0; else sum += 0; creditSum = sum; 5.2 对象的构造和初始化5.2 对象的构造和初始化 要使用对象,首先必须构造它们,并指定 它们的初始状态,然后将方法应用于对象 。 在Java程序设计语言中,使用构造方法 (constructor)来构造新的实例。一个构 造方法是一个新的方法,它的作用是构造 并初始化对象。5.2 对象的构造和初始化 构造方法是类的一种特殊方法,

8、它的特殊性主 要体现在如下的几个方面: (1)构造方法的方法名与类名相同。 (2)构造方法没有返回类型。 (3)构造方法的主要作用是完成对类对象的初 始化工作。 (4)构造方法不能由编程人员显式地直接调用 。 (5)在创建一个类的新对象的同时,系统会自 动调用该类的构造方法为新对象初始化。构造方法的特点(1)构造方法和类具有相同的名字。 (2)一个类可以有多个构造方法。 (3)构造方法可以有0个、1个或多个参数 。 (4)构造方法没有返回值。 (5)构造方法总是和new运算符一起被调 用。 (6)构造方法必须声明为public。Java中可以不定义构造方法 Java中可以不定义构造方法,此时系

9、统会自动生成一个 默认的构造方法。这个构造方法的名字与类名相同,它 没有任何形式参数,也不完成任何操作。 在类的定义中可以不定义构造方法,而其他类仍然可以 通过调用new classname()来实例化某类对象。这是因 为系统给未定义构造方法的类自动加入了一个特殊的构 造方,这个方法不带参数且方法体为空,称为默认的构 造方法。 用默认的构造方法初始化类对象时,系统把类对象的 数据成员初始化为默认值。 注意:一旦在类中自己定义了构造方法,默认的构造方 法就不被加到类的定义中。此时,如果在程序中初始化 对象时使用了默认的构造方法将出现了编译错误,所以 为了避免此类错误,如果类中定义了构造方法,通常

10、也 加入不带参数的构造方法。构造方法可以有多个 满足不同的创建对象的方式 不同构造方法之间完全同名,但输入参数 的个数或类型不能相同。 这实际上是方法的重载(overload),见 后 类中只要自定义了一个构造方法,系统为 类准备的默认构造方法就失效了。 如果希望默认的无参数构造方法依然可用, 则需添加一个这样的构造方法构造方法示例public class Student private String name;/ 姓名 private int id;/ 学号 private String sex;/ 性别 public Student() /无参数构造方法,可以没有 public Stude

11、nt(String name, int id, String sex)/构造方法 this.name = name; this.id = id; this.sex = sex; /写toString 方法来显示对象的各个属性 /在main方法中创建一个对象并显示其内容 5.3 this引用5.3 this引用 this是java中的一个关键词,用于在类中指 代所创建的对象本身 通过这种方法使得类中一个方法可调用同 类中的其它方法和成员变量.例: 构造方法调用另一构造方法希望在无参数的构造方法中给对象的成员变量赋予默认值public Student()name=“unknown“;id=0;se

12、x=“unknown“;/this(“unknown“,0,“unknown“); /主程序验证 public static void main(String args) 5.4 子类(和继承)继承性是软件复用的一种形式。新类由已存在 的类生成,通过保留它们的属性和行为,并且根据 新类的要求对性能加以修改,添加新的属性和行为 。从现有类出发定义一个新类,称为新类继承了 现有的类,其中被继承的现有类叫做超类( superclass)或父类,由继承而得到的类称为子类( subclass)。继承w Super超类继承super部分sub1增加部分继承super部分sub2增加部分Sub1子类Sub2

13、子类如果子类只从一个父类继承,则称为单继承; 如果子类从一个以上父类继承,则称为多继承。注 意 Java不支持多重继承,但它支持“接口”概念(间 接实现多重继承)。单重继承一、父类和子类继承和继承的实现1、类继承的实现修饰符 class 类名 extends 父类名 类体; 二、成员变量的继承成员变量的继承 子类继承父类中所有可被子类访问的成员 变量。继承原则如下: w 能够继承那些声明为public和protected的成 员变量。 w 能够继承同一包中的那些默认修饰符的成 员变量。 w 不能继承那些声明为private的成员变量。 w 如果子类声明一个与父类成员变量同名的 成员变量,则不能

14、继承父类的成员变量。 此时子类的成员变量称做隐藏隐藏了父类的成 员变量。三、成员方法的继承成员方法的继承 子类继承成员方法的规则类似于继承成员变量 的规则:子类继承父类中所有可被子类访问 的成员方法。继承规则如下: w 能够继承那些声明为public和protected的成员 方法。 w 能够继承同一包中的默认修饰符的成员方法 。 w 不能继承那些声明为private的成员方法。 w 不能继承父类的构造方法。 w 如果子类方法与父类方法同名,则不能继承 。子类方法称为覆盖覆盖了父类中的那个方法。super和this关键字:指代本对象和父对 象1、super(参数) :基类中的某一个构造方法(必

15、 须作为为构造方法中的第一条语句被使用) 2、this(参数) :本类中另一种形式的构造方法( 必须作为为构造方法中的第一条语句被使用); 3、super: 引用当前对象的直接父类(即上一级或 “父”但并不代表“爷爷”)的对象(用来访问直接 父类中被隐藏的父类中成员数据或方法,基类与 派生类中有相同成员定义时) 4、this:代表当前对象名。其主要的用途:在程 序中易产生二义性之处,应使用this来指明当前 对象;如果方法的形参与类中的成员数据同名, 这时需用this来指明成员变量名student的子类:postgraduatepublic class Postgraduate extends Student private String tutor ;/可增加与父类类似的带参数的构造方法 public Postgraduate(String name, int id, String sex,String tutor) super(name,id,sex); this.tutor=tutor; public String getTutor() return tutor; public void setTutor(String tutor)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号