类的封装继承和多态1

上传人:tian****1990 文档编号:71605316 上传时间:2019-01-21 格式:PPT 页数:61 大小:581KB
返回 下载 相关 举报
类的封装继承和多态1_第1页
第1页 / 共61页
类的封装继承和多态1_第2页
第2页 / 共61页
类的封装继承和多态1_第3页
第3页 / 共61页
类的封装继承和多态1_第4页
第4页 / 共61页
类的封装继承和多态1_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《类的封装继承和多态1》由会员分享,可在线阅读,更多相关《类的封装继承和多态1(61页珍藏版)》请在金锄头文库上搜索。

1、类的封装、继承和多态,金陵科技学院 刘晶 2011.3,3,类的封装、继承和多态,2,复 习,基本语法规则 数据类型 运算符与表达式 流程控制语句 分支语句 循环语句 Java的数组和字符串,类的封装、继承和多态,3,主要内容,OOP的概念 类和对象 OOP的特点 类的封装性 类的继承性 类的多态性 类的抽象性,类的封装、继承和多态,4,OOP概念,公共数据,算法数据结构,对象消息,类的封装、继承和多态,5,OOP的主要特点,封装性(encapsulation) 即实现了信息的隐藏 提高了程序的模块化及安全性,且易于维护 继承性(inheritance),交通工具,Java仅支持单重继承,类的

2、封装、继承和多态,6,OOP的主要特点(续),继承性(续) 体现了对现实世界的抽象模拟 提高了代码的复用性,增强了软件的扩充性 多态性(polymorphism) 用同一个名字调用实现不同操作的方法 方式1:不同的类之间的同名方法 如:中国人/日本人/美国人 说话 方式2:参数不同的同名方法(如加法) 使用灵活方便,且降低了维护和编程量,类的封装、继承和多态,7,JAVA中的OOP,几个概念 类:既包括数据又包括作用于数据的一组操作的封装体 系统类库中已定义好的类 用户自定义的类 对象(实例instance):类的实例 创建某个类的具体对象(类似变量声明) 类名 欲创建的对象名 new 类名(

3、 参数表 ) ; 例如: String s = new String( “Hello!” ) ;,类的封装、继承和多态,8,JAVA中的OOP(续),Java中的类结构 基类:所有JAVA的类都派生自Object Java的类可组织在包(package)中 Java提供的标准类库分布在一系列的包中,如java.lang,java.util,等 编程的过程就是继承基类或标准类而创建、定义特殊子类的过程,public class Object public Object() /构造方法 public String toString() /描述对象 public boolean equals(Obj

4、ect obj)/比较对象相等 protected void finalize() throws Throwable ,类的封装、继承和多态,9,类的封装性,类说明语法: 类修饰符 class 类名 extends 超类名 implements 接口名 成员变量定义; 成员方法定义; ,类体,类的封装、继承和多态,10,类的封装性,类修饰符(Modifier): public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类 缺省:可被当前包中的其他类访问 abstract:没有实例的抽象概念类,必需派生子类 final:不能再被扩展,不包含子类的类;易于安全性的实现,或用

5、于创建固定功能的类 父类继承声明:extends 父类名 实现接口(interface):implements 接口名,类的封装、继承和多态,11,类的封装性,例: public abstract class shape class rectangle extends shape final class roundrect extends rectangle . ? final可以与abstract一起使用吗?,类的封装、继承和多态,12,类的封装性,声明成员变量member的语法: 修饰符 数据类型 变量名; 引用:对象名.变量 修饰符 访问控制符 public:可被所有其他类引用 prot

6、ected:可被本包中的类及子类引用,类的封装、继承和多态,13,类的封装性,缺省:可被本包中的类引用 private protected:可被该类自身、子类引用 private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用 static:类成员变量,对所有的实例一致,引用时前缀可使用类名或对象名 final:数值不变常量,定义同时应对其进行初始化,类的封装、继承和多态,14,类的封装性,例: class shape private protected int x; private static int y; static final float MAX_AREA=100.0f;

7、 ,类的封装、继承和多态,15,类的封装性,方法的声明语法: 修饰符 返回类型 方法名(参数列表) throws 异常名 方法体; 定义对类内成员变量(数据)的操作 谁可以调用方法、接受哪些参数、如何返回信息,类的封装、继承和多态,16,类的封装性,修饰符(Modifier): 访问控制符: public、private、protected、private protected static:静态方法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在static方法体中只能直接使用static变量和static方法 不可被覆盖(重写) abstract:只有声明没有语句,要在子类中通过重新

8、定义(override)来实现 final:不可被覆盖(重写) (override),类的封装、继承和多态,17,类的封装性,返回类型:void、return 参数列表:值传递 PassTest.java throws: 通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。,类的封装、继承和多态,18,类及其成员的访问权限,类中成员的访问权限 类的访问权限:只有public和缺省两种 。 public class Date1 /公有的类 class Date1_ex /默认的类 声明公有的set()和ge

9、t()方法存取对象的属性,类的封装、继承和多态,19,对象,创建对象过程 声明对象:为引用类型变量分配引用空间 创建实例(对象实例化):为实例分配存储空间,并对实例属性初始化 默认初始化 显示初始化(可省) 执行构造方法初始化 为对象赋值(必为地址值) 对象的使用:用点操作符访问对象中的成员 【例3.1】声明日期类及使用日期对象。,类的封装、继承和多态,20,对象的引用模型,类的封装、继承和多态,21,对象的关系运算与比较相等,类的封装、继承和多态,22,构造方法(constructor),问题的提出 Java试图在每个对象一诞生时,就给它一确定的状态,但有时这种系统的缺省初值(系统定义构造方

10、法赋值)不合适;所以在创建一个新对象时,需用自定义构造方法完成合法的初始化,使类内成员的初始化工作不依赖于外界完成。 体现了面向对象的autonomy原则。,类的封装、继承和多态,23,构造方法(续),构造方法与类同名 构造方法没有返回值(无需void说明) 构造方法不能被继承 构造方法只能在创建类对象时由系统隐含调用(new 构造方法),而不能直接调用 当创建类对象时,自动执行类的构造方法,初始化新对象的成员变量,类的封装、继承和多态,24,构造方法(续),一个类中可创建多个构造方法(重载) 当类中声明了用户自定义的构造方时,则覆盖不带参数的默认构造方法 例:BankTester.java,

11、类的封装、继承和多态,25,一个小问题?,BankAccount r1=new BankAccount( ); BankAccount r2=r1; 这时,内存中为BankAccount类创建了几个实例呢? 这个实例有几个引用(reference)呢? BankAccount r2=new BankAccount(r1); 这时又有几个BankAccount类的实例和引用呢?,类的封装、继承和多态,26,拷贝构造方法,使用拷贝构造方法复制实例 浅拷贝:对象成员变量都为基本数据类型 深拷贝:对象成员变量为引用数据类型,类的封装、继承和多态,27,析构方法,Public void finalize

12、() 在一个对象占用的内存空间被返还给系统存储堆之前自动执行 也可对象调用执行:d.finalize(); Java的垃圾回收机制: 每个对象有自己的REFERENCE计数器,计数 器减为零时对象丢失,系统在其后某个时刻自 动回收不再可用的对象,调用析构方法,类的封装、继承和多态,28,this引用,指代对象本身 this 访问本类的成员变量和成员方法 this.成员变量 this.成员方法(参数列表) 调用本类重载的构造方法 this(参数列表),类的封装、继承和多态,29,this引用,例子: class Point int x,y; Point(int x,int y) this.x=x

13、;this.y=y; /this指代本类对象 Point()this(0,0); /this调用本类带两个整形参数的构造方法 public Point getPoint() Point p=this; /this指代调用本方法的当前对象 return p; ,类的封装、继承和多态,30,实例成员变量与静态成员变量,实例成员变量与静态成员变量 两者声明时的差别 public class Person1 String name; /姓名,实例成员变量 int age; /年龄 static int count; /人数,类成员变量 两者存储结构的差别 两者引用方式的差别,类的封装、继承和多态,31

14、,实例成员变量与静态成员变量,两者存储结构的差别,类的封装、继承和多态,32,实例成员变量与静态成员变量,两者引用方式的差别 类名.静态成员变量名 如:Person1.count=1; 注:不能使用this引用 对象名.实例成员变量名 如:Person1 p1=new Person1(); p1.age=20;,类的封装、继承和多态,33,实例成员变量与静态成员变量,Java语言在创建对象时不为静态成员变量分配空间,只为实例成员变量分配空间 静态成员变量不依赖某一个具体的对象,即使没有创建一个它所属类的对象,它也是存在的,只要该类的代码装入,则该类成员变量就是存在的,就可以使用,类的封装、继承

15、和多态,34,实例成员方法与静态成员方法,两者声明时的差别 public static int howMany() /静态成员方法 return count; /静态成员方法只能直接访问静态成员变量 public static void main(String args)/main方法也是静态成员方法,类的封装、继承和多态,35,实例成员方法与静态成员方法,两者引用方式的差别 静态成员方法与静态成员变量类似,不依赖于具体的对象,在调用时直接通过类名来调用: 类名.类方法名(方法的参数表),类的封装、继承和多态,36,实例成员方法与静态成员方法,两者方法体中语句的差别 静态成员方法的方法体中不能使用this,因为对静态成员方法来说,不存在当前对象 不能直接访问所在类的实例成员变量及成员方法 例子:Member.java,类的封装、继承和多态,37,类封装性实例,【例3.2】日期类的封装 设计并重载构造方法 成员变量设计为私有的访问权限,限制其他类对成员变量的访问 成员方法设计为公有的访问权限,提供给其他类使用 使用this引用增强程序的可维护性 使用类名调用静态方法 【例3.3】 使用对象作为成员变量并实现深拷贝的Person类,类的封装、继承和多态,38,类封装小结,类中的数据使用private定义 使用public方法来操作数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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