《Java与面向对象》PPT课件.ppt

上传人:sh****n 文档编号:6578763 上传时间:2020-02-29 格式:PPT 页数:44 大小:341.31KB
返回 下载 相关 举报
《Java与面向对象》PPT课件.ppt_第1页
第1页 / 共44页
《Java与面向对象》PPT课件.ppt_第2页
第2页 / 共44页
《Java与面向对象》PPT课件.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第3章Java与面向对象 3 1面向对象编程概述 面向对象编程的基本概念面向对象的编程思想面向对象的基本特性 面向对象编程的基本概念 1 对象 Object 对象是系统中用来描述客观事物的一个实体 它是构成系统的一个基本单位 在面向对象的程序中 对象就是一组变量和相关方法的集合 其中变量表明对象的属性 方法表明对象所具有的行为 2 类 Class 类是具有相同属性和行为的一组对象的集合 它为属于该类的所有对象提供了统一的抽象描述 其内部包括属性和行为两个主要部分 可以说类是对象的抽象化表示 对象是类的一个实例 3 消息 Message 对象之间相互联系和相互作用的方式称为消息 一个消息只要由5个部分组成 发送消息的对象 接收消息的对象 传递消息的方法 消息的内容以及反馈信息 对象提供的服务是由对象的方法来实现 因此发送消息实际上就是调用对象的方法 通常 一个对象调用另一个对象中的方法 即完成了一次消息传递 面向过程的程序设计 面向对象的编程思想 面向对象程序设计是把把复杂的问题按照现实世界中存在的形式分解成很多对象 这些对象以一定的形式交互 通讯 协调和配合 来实现整个系统 面向对象的基本特性 封装性继承性多态性 封装性 封装性就是把对象的属性和行为结合成一个独立的相同单位 并尽可能隐蔽对象的内部细节 对外形成一个边界 只保留有限的对外接口使之与外部发生联系 封装的特性使得对象以外的部分不能随意存取对象的内部数据 属性 保证了程序和数据不受外部干扰且不被误用 面向对象的编程语言主要通过访问控制机制来实现封装 Java语言中提供了以下4种访问控制级别 public 对外公开 访问级别最高 potected 只对同一个包中的类或子类公开 默认 只对同一个包中的类公开 Private 不对外公开 只能在对象内部访问 访问级别最低 继承性 继承是一个类获得另一个类的属性和方法的过程 在Java语言中 通常我们具有继承关系的类称为父类 superclass 超类 和子类 subclass 子类可以继承父类的属性和方法 同时又可以增加子类的新属性和新方法 多态性 多态性是指在继承关系中的父类中定义的属性或方法被子类继承之后 可以具有不同的数据类型或表现出不同的行为 这使得同一个属性或方法在父类及其各子类类中具有不同的含义 例如 哺乳动物有很多叫声 狗和猫是哺乳动物的子类 它们的叫声分别是 汪汪 和 喵喵 3 2类 类的定义成员变量成员方法方法重载修饰符 类的定义 类通过关键词class来定义 一般形式为 类定义修饰符 class 类体 成员变量声明 成员方法 说明 1 类的定义通过关键字class来实现 所定义的类名应符合标识符的规定 一般类名的第一个字母大写 2 类的修饰符用于说明类的性质和访问权限 包括public private abstract final 其中public表示可以被任何其他代码访问 abstract表示抽象类 final表示最终类 详细说明见后面章节 类体部分定义了该类所包括的所有成员变量和成员方法 成员变量 成员变量是类的属性 声明的一般格式为 变量修饰符 变量修饰符 public protected private 和默认 frieddlly 成员变量 实例变量 类变量 静态变量 static进行修饰 成员方法 成员方法定义的类的操作和行为 一般形式为 方法修饰符 方法体 成员方法修饰符主要有public private protected final static abstract和synchronized七种 前三种的访问权限 说明形式和含义与成员变量一致 与成员变量类似 成员方法也分为实例方法和类方法 如果方法定义中使用了static 则该方法为类方法 publicstaticvoidmain String args 就是一个典型的类方法 方法重载 重载是指同一个类的定义中有多个同名的方法 但是每个重载方法的参数的类型 数量或顺序必须是不同的 每个重载方法可以有不同的返回类型 但返回类型并不足以区分所使用的是哪个方法 例如 classArea doublegetArea floatr return3 14159 r r doublegetArea floatl floatw returnl w 修饰符 3 3对象 对象的创建对象的引用构造函数 对象的创建 第一步 进行对象的声明 一般形式为 例如 Animaldog 第二步 实例化对象 通过运算符new实现的 new运算符为对象动态分配 即在运行时分配 实际的内存空间 用来保存对象的数据和代码 并返回对它的的引用 该引用就是new分配给对象的内存地址 一般形式为 new 例如 dog newAnimal 以上两步也可合并 new 对象的创建 举例 从图中 我们可以看到对象的声明只是创建变量的引用 并不分配内存 要分配实际内存空间 必须new关键字 对象的引用 对象创建之后 通过 运算符用于访问对象中的成员变量和成员方法 一般形式为 由于类变量和类方法不属于某个具体的对象 因此我们也可以直接使用类型替代对象名访问类变量或类方法 例如 Animal age 3 Animal eat 举例3 1ObjectDemo java publicclassObjectDemo publicstaticvoidmain String args Animala newAnimal Animalb newAnimal a name Dog Animal age 3 b name Cat System out println b name is b age yearsold 构造函数 构造函数是定义在类中的一种特殊的方法 在创建对象时被系统自动调用 主要完成对象的初始化 即为对象的成员变量赋初值 对于Java语言中每个类 系统将提供缺省的不带任何参数的构造函数 如果程序中没有显示地定义类的构造函数 则创建对象时系统会调用缺省的构造函数 一旦程序中定义了构造函数 系统将不再提供该缺省的构造函数 构造函数具有以下特点 1 构造函数名必须和类名完全相同 类中其他成员方法不能和类名相同 2 构造函数没有返回值类型 也不能返回void类型 其修饰符只能是访问控制修饰符 即public private protected中的任一个 3 构造函数不能直接通过方法名调用 必须通过new运算符在创建对象时自动调用 4 一个类可以有任意个构造函数 不同的构造函数根据参数个数的不同或参数类型的不同进行区分 称之为构造函数的重载 例3 2AnimalDemo java classAnimal2 Stringname intage Animal2 name Dog age 3 Animal2 Stringname intage this name name this age age publicclassAnimalDemo publicstaticvoidmain Stringargs Animal2a newAnimal2 Animal2b newAnimal2 cat 5 System out println a name is a age yearsold System out println b name is b age yearsold 程序运行结果 Dogis3yearsoldCatis5yearsold 3 4继承 子类的创建成员变量的隐藏和方法的覆盖构造函数的继承多态 子类的创建 Java中的继承通过extends关键字实现 创建子类一般形式如下 class类名extends父类名 子类体 子类可以继承父类的所有特性 但其可见性 由父类成员变量 方法的修饰符决定 对于被private修饰的类成员变量或方法 其子类是不可见的 也即不可访问 对于定义为默认访问 没有修饰符修饰 的类成员变量或方法 只有与父类同处于一个包中的子类可以访问 对于定义为public或protected的类成员变量或方法 所有子类都可以访问 成员变量的隐藏和方法的覆盖 子类中可以声明与父类同名的成员变量 这时父类的成员变量就被隐藏起来了 在子类中直接访问到的是子类中定义的成员变量 同理 子类中也可以声明与父类相同的成员方法 包括返回值类型 方法名 形式参数都应保持一致 称为方法的覆盖 如果在子类中需要访问父类中定义的同名成员变量或方法 需要用的关键字super Java中通过super来实现对被隐藏或被覆盖的父类成员的访问 super的使用有三种情况 1 访问父类被隐藏的成员变量和成员方法 super 成员变量名 2 调用父类中被覆盖的方法 如 super 成员方法名 参数列 3 调用父类的构造函数 如 super 参数列表 super 只能在子类的构造函数中出现 并且永远都是位于子类构造函数中的第一条语句 例3 3InheritDemo java classAnimal Stringname animal intage voidmove System out println animalmove classDogextendsAnimal Stringname dog 隐藏了父类的name floatweight 子类新增成员voidmove 覆盖了父类的方法move super move 用super调用父类的方法System out println DogMove publicclassInheritDemo publicstaticvoidmain Stringargs Dogd newDog d age 5 d weight 6 System out println d name is d age yearsold System out println weight d weight d move 程序运行结果 dogis5yearsoldweight 6 0animalmove DogMove 构造函数的继承 子类对于父类的构造函数的继承遵循以下的原则 子类无条件地继承父类中的无参构造函数 若子类的构造函数中没有显示地调用父类的构造函数 则系统默认调用父类无参构造函数 若子类构造函数中既没有显示地调用父类的构造函数 且父类中没有无参构造函数的定义 则编译出错 对于父类的有参构造函数 子类可以在自己的构造函数中使用super关键字来调用它 但必须位于子类构造函数的第一条语句 子类可以使用this 参数列表 调用当前子类中的其他构造函数 例3 4InheritDemo2 java classSuperClass SuperClass System out println 调用父类无参构造函数 SuperClass intn System out println 调用父类有参构造函数 n classSubClassextendsSuperClass SubClass intn System out println 调用子类有参构造函数 n SubClass super 200 System out println 调用子类无参构造函数 publicclassInheritDemo2 publicstaticvoidmain Stringarg SubClasss1 newSubClass SubClasss2 newSubClass 100 程序运行结果 调用父类有参构造函数 200调用子类无参构造函数调用父类无参构造函数调用子类有参构造函数 100 多态 多态的实现必须具备三个条件 必须存在继承 必须有方法的覆盖 必须存在父类对象的引用指向子类的对象 当使用父类对象的引用指向子类的对象 Java的多态机制根据引用的对象类型来选择要调用的方法 由于父类对象引用变量可以引用其所有的子类对象 因此Java虚拟机直到运行时才知道引用对象的类型 所要执行的方法需要在运行时候才确定 而无法在编译时候确定 例3 5PloyDemo java classAnimal3 voideat System out println animaleat classDogextendsAnimal3 voideat System out println Dogeatbone classCatextendsAnimal3 voideat System out println Cateatfish publicclassPloyDemo publicstaticvoidmain Stringargs Animal3a a newDog a eat a newCat a eat 3 6抽象类和接口 抽象类接口final关键字 抽象类 一般格式如下 abstractclass类名 类体 说明 抽象类是不能直接实例化对象的类 也即抽象类不能使用new运算符去创建对象 抽象类一般包括一个或几个抽象方法 所谓抽象方法需在abstract修饰符进行修饰 抽象方法只有方法的声明部分 没有具体的方法实现部分 抽象类的子类必须重写父类的抽象方法 才能实例子化 否则子类也是一个抽象类 抽象类中不一定包含抽象方法 但是包含抽象方法的类必须说明为抽象类 例3 6AbstractDemo java abstractclassAnimal4 Stringname Animal4 Stringname this name name voidgetname System out println Animal snameis name abstractvoidmove classDogextendsAnimal4 intage Dog Stringname intage super name this age age voidmove System out println Dogisrunning voidgetage System out println Dogis age yearsold classAbstractDemo publicstaticvoidmain Stringargs Dogd newDog wangwang 5 d move d getname d getage 程序运行结果 Dogisrunning Animal snameiswangwangDogis5yearsold 接口 单重继承 接口 接口的定义 接口定义的一般形式为 访问控制符 interface 类型标识符final符号常量名n 常数 返回值类型方法名 参数列表 说明 1 接口中的成员变量默认为public static final 必须被显示地初始化 修饰符可以省略 2 接口中的成员方法只能是抽象方法 默认为public abstract 修饰符可以省略 3 接口不能被实例化 必须通过类来实现接口 接口的实现 class类名 extends父类名 implements接口1 接口名2 类体 在实现接口的类中 一般必须覆盖实现所有接口中声明的方法 除非将实现的类声明为abstract类 并将未实现的方法声明为抽象方法 在3 6中 Ant类继承了Insect类同时实现了Flyanimal接口 Pigeon类继承了Bird类同时实现了Flyanimal接口 例3 7InterfactDemo java interfaceFlyanimal voidfly classInsect intlegnum 6 classBird intlegnum 2 voidegg classAntextendsInsectimplementsFlyanimal publicvoidfly System out println Antcanfly classPigeonextendsBirdimplementsFlyanimal publicvoidfly System out println pigeoncanfly publicvoidegg System out println pigeoncanlayeggs publicclassInterfactDemo publicstaticvoidmain Stringargs Anta newAnt a fly System out println Ant slegsare a legnum Pigeonp newPigeon p fly p egg 程序运行结果 AntcanflyAnt slegsare6pigeoncanflypigeoncanlayeggs 接口和抽象类的比较 抽象类和接口都可以有抽象方法 接口中只可以有常量 不能有变量 而抽象类既可以有常量 也可以有变量 接口中只可以有抽象方法 抽象类中既可以有抽象方法 也可以非抽象方法 包 包机制引入的作用体现在以下几个方面 1 能够实施访问权限的控制 2 利用包可以区分名字相同的类 在同一包中不允许出现同名类 不同包中可以存在同名类 3 利用包可以对于不同的类文件划分和组织管理 Java预定义包 Java为用户提供了130多个预先定义好的包 本书常用的包如下 java applet包含所有实现JavaApplet的类 java awt包含抽象窗口工具集的图形 文本 窗口GUI类 java awt event包含由AWT组件触发的不同类型事件的接口和类的集合 java awt font包含与字体相联系的接口和类的集合 java lang包含Java程序设计所必需的最基本的类集 如String Math Interger System和Thread 提供常用功能 包含所有输入输出类java io包含所有实现网络功能的类javax swing包含所有图形界面设计中swing组件的类 包的创建 包创建的一般形式为 package 包的引用 方法一 直接使用包 即在要引用的类名前加上包名作为修饰符 一般用于在引用其它包中的类或接口的次数较少的情况下 例如 jsit library Bookb newjsit library Book 方法二 使用包引用语句import 在java程序中 可以定义多条import语句 如果有package语句 则import语句紧接在其后 否则import语句应位于程序的第一条语句 import语句常用的形式有两种 1 import 导入指定的一个public类或者接口 2 import 包名 导入包中的当前类需要使用的所有类或接口 注意此时不能引用该包中其它文件夹中的类 这种方法一般不被推荐 因为它常导致程序加载许多不需要的类 增加了系统的负载 同时也加大了类名冲突的概率 因此一般建议使用第一种格式 例如 importjsit Library importjsit library importjava io importjsit util Date 举例 例3 8Animal javapackagemypackage classAnimal3 Stringname intage Animal3 name Dog age 3 Animal3 Stringname intage this name name this age age Catis5yearsold 例3 9PackageDemo javapackagemypackage importmypackage Animal3 publicclassPackageDemo publicstaticvoidmain Stringargs Animal3a newAnimal3 Animal3b newAnimal3 cat 5 System out println a name is a age yearsold System out println b name is b age yearsold 运行结果 Dogis3yearsoldCatis5yearsold
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!