Java程序语言及设计第3章.ppt

上传人:max****ui 文档编号:6362401 上传时间:2020-02-23 格式:PPT 页数:155 大小:647KB
返回 下载 相关 举报
Java程序语言及设计第3章.ppt_第1页
第1页 / 共155页
Java程序语言及设计第3章.ppt_第2页
第2页 / 共155页
Java程序语言及设计第3章.ppt_第3页
第3页 / 共155页
点击查看更多>>
资源描述
1 Java语言程序设计 2 第三章面向对象特征 基本概念类的定义对象类的继承和多态接口和包常用工具类 3 3 1基本概念 什么是编程语言 人和计算机进行交流的工具和手段编程语言的发展机器语言 0101001汇编语言 mov push add call第三代语言 高级语言 以C语言为代表 过程式编程语言 ProceduralProgrammingLanguage 第四代语言 非过程化 面向对象的编程语言语言的发展 抽象的过程 4 面向对象 ObjectOriented OO 面向对象编程 ObjectOrientedProgramming OOP 面向对象是一种软件开发的方法 面向对象的分析与设计 OOA OOD 研究生课程 第一个面向对象的语言 Simula 67第一个成功的面向对象编程语言 SmalltalkC JAVA C PERL等用客观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象 彼此通过消息的传递 请求其他对象进行工作 3 1基本概念 5 五个基本概念对象类封装性继承性多态性 3 1基本概念 6 对象 object everythingisanobject现实世界的对象 桌子 书 自行车 电视 狗 文件 表格 按钮 窗口对象包含两个特性状态 指对象本身的信息 内部信息 内部变量 行为 实现对信息的访问 对象的操作标志 代表对象的标识符山地车的状态 两个车轮 一些齿轮 速度 挡数 行为 刹车 加速 减速和换挡 书包含很多信息 拥有访问所包含信息的方法 一页一页的看 通过目录找到感兴趣的内容 3 1基本概念 7 对象 object 状态 变量 variables 行为 方法 method 对象就是变量和相关方法的软件集合一个对象可以由其他对象组合而成 窗口 按钮 菜单条 文本框 状态栏等 程序就是对象的集合 对象之间相互交互和通信完成任务 3 1基本概念 8 类 class 亚里士多德 theclassoffishesandtheclassofbirds现实世界中 存在很多同类的对象 很多桌子 书 自行车一种原型 一种抽象 一种共性 一个模板Everyobjecthasatype实例 instance 某类对象的一个特定实体 类是对象的一个抽象表格 类 填入不同的个人信息 不同的对象 3 1基本概念 9 封装性对象本身的数据得到保护 隐藏其他对象仅仅需要知道对该对象的访问方法 接口 interface 即可好处模块化 每个对象的源文件可以是相互独立的 可以被不同的程序调用 每个对象是一块积木 可以搭建不同的形状信息隐藏 通常定义一个公共接口 方法实现对对象的访问 可以调整对象的私有信息和方法 而不会对其他调用它的对象产生影响可重用性黑盒子电脑的DIY喷墨打印机 硒鼓坏 彩色硒鼓 3 1基本概念 10 继承性为什么会有继承 建立一个类后 发现另一个新的类有相同的特性 两个选择 重新定义一个新的类 在已有类的基础上 修改 加加 减减 父类和子类 子类继承 拥有 父类所有的数据和方法 同时子类可以有新的数据和方法 青出于蓝 而胜于蓝 树型结构 层次化结构 根 基类 3 1基本概念 11 继承性 运输工具 航空运输工具 陆地运输工具 水上运输工具 人力驱动 引擎驱动 二轮 四轮 客运 货运 3 1基本概念 12 继承性多重继承 类A 类B 类C 类D 类F 类G 一个类拥有多个父类 产生二义性 例类C和类D都有一个同名的方法 类G Java中仅仅支持单一继承 同时Java采用Interface 接口 实现多重继承而避免父类二义性 3 1基本概念 13 多态性表现在继承中 方法的重写子类从父类继承 extends扩展 而来多个子类同属一个父类 所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中 方法的重载 3 1基本概念 14 多态性多态性在继承中的表现 3 1基本概念 15 多态性 classSquareextendsShape voiddraw System out println Square draw voiderase System out println Square erase classTriangleextendsShape voiddraw System out println Triangle draw voiderase System out println Triangle erase classShape voiddraw voiderase classCircleextendsShape voiddraw System out println Circle draw voiderase System out println Circle erase 3 1基本概念 16 多态性 publicclassTest publicstaticShaperandShape switch int Math random 3 default case0 returnnewCircle case1 returnnewSquare case2 returnnewTriangle publicstaticvoidmain String args Shape s newShape 9 for inti 0 i s length i s i randShape for inti 0 i s length i s i draw Circle draw Triangle draw Circle draw Circle draw Circle draw Square draw Triangle draw Square draw Square draw 3 1基本概念 17 第三章面向对象特征 基本概念类的定义对象类的继承和多态接口和包常用工具类 18 程序是对象的集合 而对象是类的实例化源程序就是一个个的Java类Java本身提供的类 核心API 见Java文档中描述程序员可以对其进行调用j2sdk1 4 1 01 jre lib rt jar 22 4MB 程序员自己定义的类 3 2类的定义 19 3 2 1类的定义格式 类的修饰符 class类名 extends父类名 implements 接口名 类型成员变量1 类型成员变量2 类型成员方法1 参数1 参数2 方法体 类型成员方法2 参数1 参数2 方法体 3 2类的定义 20 类的定义格式 类的修饰符 class类名 extends父类名 implements接口名 类的修饰符public 公共类 可以被其他类所使用 declaresthattheclasscanbeusedbyanyclassregardlessofitspackage 无任何限制 无修饰 默认说明 aclasscanbeusedonlybyotherclassesinthesamepackage 仅仅能在同一个包中的其他类引用 abstract declaresthattheclasscannotbeinstantiated 宣布该类不能被实例化 final declaresthattheclasscannotbesubclassed 宣布该类不能有子类 3 2类的定义 21 类的修饰符final Declaresthattheclasscannotbesubclassed 宣布该类不能有子类 3 2类的定义 finalclassChessAlgorithm classBetterChessAlgorithmextendsChessAlgorithm Can tsubclassfinalclasses classChessAlgorithmclassBetterChessAlgorithmextendsChessAlgorithm 1error 22 类的定义格式 类的修饰符 class类名 extends父类名 implements接口名 extends 继承的关系implements 实现哪些接口 interface 的方法 实现多重继承publicclassTestextendsFrameimplementsActionListener ItemListener 3 2类的定义 23 一个简单的类classStudent Stringname stuNumber doublescore1 score2 score3 voidset1 Strings1 Strings2 name s1 stuNumber s2 System out println name stuNumber doublesetScore doubled1 doubled2 doubled3 doubled score1 d1 score2 d2 score3 d3 d d1 d2 d3 returnd 3 2类的定义 24 包 Package 的概念packageorg jalpha classtest 源文件位置 D src org jalpha test java 编译方法1 cdD src org jalpha javactest java 编译方法2 cdD src javacorg jalpha test java class文件位置 D src org jalpha test class 运行 cdD src javaorg jalpha test 3 2类的定义 25 包 package 的概念通过包来管理类名空间防止同名类名的冲突层次化的结构 3 2类的定义 对个体 个人和机构 将类文件放在不同的目录下防止重名org jalpha method1 javamethod2 java ABC公司Engine java XYZ公司Engine java 需调用Engine java ABC公司com abc Engine java XYZ公司com xyz Engine java 26 包 package 的概念packageorg jalpha classtest 3 2类的定义 D src org jalpha test javaD src org jalpha test1 javaD src org jalpha test2 java 27 对象具有状态和行为成员变量定义 访问权限修饰符 类型变量名 访问权限修饰符 类型变量名 初值 访问权限修饰符 类型变量名 初值 变量名 初值 成员方法定义 访问权限修饰符 方法返回类型方法名 throws异常名 方法体 类型 基本类型 复合类型 数组 类和接口 3 2 2类成员 变量和方法 28 访问控制修饰符公共访问控制符 public被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身 同一个包中的其他类 其他包中的子类访问私有保护访问控制符 privateprotected该类自身 所有子类访问 类成员变量的访问 29 非访问控制修符静态变量static属于类的变量最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改 类成员变量的访问 30 public 公共变量 公共方法 容许全权访问 无任何限制 先构造对象 再访问 类成员的访问 classA publicintx publicvoidprint classB voidtest Aa newA a x 100 a print packageabc classA publicintx publicvoidprint packagexyz importabc A classB voidtest Aa newA a x 100 a print 直接访问公有变量x和公共方法print 31 private 私有变量 私有方法 仅能在其所定义的类中被访问 先构造对象 再访问 D javacA javaxhasprivateaccessinAa x 100 print hasprivateaccessinAa print 2errors 类成员的访问 classA privateintx privatevoidprint classB voidtest Aa newA a x 100 a print 32 protected 保护变量 保护方法 容许类本身 子类 有一定限制 以及同一个包中所有类访问 先构造对象 再访问 类成员的访问 classA protectedintx protectedvoidprint classB voidtest Aa newA a x 100 a print packageabc classA protectedintx protectedvoidprint packagexyz importabc A classBextendsA voidtest Aa Bb a x 100 a print b x 100 b print illegal illegal legal legal 33 无修饰 友好变量 友好方法 容许类本身以及同一个包中所有类访问 类成员的访问 classA intx voidprint classB voidtest Aa newA a x 100 a print packageabc classA intx voidprint packageabc classB voidtest Aa newA a x 100 a print 34 小结 指子类与父类不在同一个包中的情况 类成员变量的访问 35 static 静态变量 静态方法 类的变量 方法 独立于类的对象 可以直接根据类名调用classS staticintA 12 B 34 staticvoidprint classTest publicstaticvoidmain Stringargs System out println A S A B S B S print 类成员变量 36 static 静态变量 静态方法 classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x D javacTest javaTest java 9 non staticmethodprint int cannotbereferencedfromastaticcontextprint x 1error classTest publicvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 Testt newTest t print x classTest publicstaticvoidprint intx System out println x publicstaticvoidmain Stringargs intx 3 print x static方法中仅仅可以调用其他static方法 类成员 37 final变量 方法final变量 定义一个常数 即变量值不能改变finaldoubleAVOGADRO 6 022e23 final类 不能有子类final方法 方法不能被重写 overriding classChessAlgorithm finalvoidnextMove ChessPiecepieceMoved BoardLocationnewLocation 类成员 变量 38 小结类 public abstract final 无修饰 private 类成员publicprotectedprivate无修饰staticfinal 类成员 变量 39 方法 对象行为的描述完成某种功能的程序块定义 访问权限修饰符 方法返回类型方法名 throws异常名 方法体 方法参数的传递变量的作用域方法的重载 overloading 重写 overriding 方法的递归调用 类成员 方法 40 访问控制修饰符公共访问控制符 public被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身 同一个包中的其他类 其他包中的子类访问私有保护访问控制符 privateprotected该类自身 所有子类访问 类成员 方法的访问 41 非访问控制修符静态方法static属于类的方法最终方法final不能被子类重新定义的方法抽象方法abstract只有方法说明 没有具体实现本地方法native以其他语言实现方法功能同步方法synchronized用于多线程程序中的协调和同步 类成员 方法的访问 42 例 成员 方法 classTest publicstaticvoidmain Stringargs doubled product AreamyArea myArea newArea d product myArea product System out println myArea的面积是 d product classArea doublewidth height voidsetV doublew doubleh width w height h doubleproduct returnwidth height 43 方法参数 成员 方法 形参和实参 D javaParameter343423 注意1 类型匹配注意2 基本类型与复合类型参数传递的结果不同 PassbyValueInJavamethods argumentsarepassedbyvalue Wheninvoked themethodreceivesthevalueofthevariablepassedin Whentheargumentisofprimitivetype pass by valuemeansthatthemethodcannotchangeitsvalue Whentheargumentisofreferencetype pass by valuemeansthatthemethodcannotchangetheobjectreference butcaninvoketheobject smethodsandmodifytheaccessiblevariableswithintheobject 44 例 成员 方法 u 3 v 2 u 5 v 10 输出结果 3451112131415 45 变量的作用域 成员变量 局部变量 成员 方法 46 方法的重载 overload 方法名相同 但方法的参数不同方法描述方法名 标识符 参数类型方法返回值绝对值abs a intint绝对值abs a longlong绝对值abs a floatfloat绝对值abs a doubledouble publicstaticintabs inta publicstaticlongabs longa publicstaticfloatabs floata publicstaticdoubleabs doublea 成员 方法 47 方法的重载 overload publicclassExam3 5 publicstaticvoidmain Stringargs inti1 3 i2 5 charc1 a c2 b floatf1 3 1f f2 4 1f doubled1 2 5 d2 3 8 System out println add i1 i2 System out println add c1 i1 System out println add i1 f1 System out println add f1 d2 System out println add d1 i2 staticintadd inti intj returni j staticdoubleadd doublei doublej returni j 成员 方法 48 方法的重写 overriding 子类重写父类的方法 成员 方法 classFather voiddisplay classSonextendsFather voiddisplay Fatherf newFather f display Sons newSon s display 49 构造方法 创建对象 实例化对象 new例1 Applea newApple 创建对象 例2 Applea 对象的说明 a newApple 实例化对象 对象的实例化通过构造方法 constructor 来实现构造方法的名字与类名相同构造方法没有返回值构造方法可以有多个 构成方法的重载 overload 50 例 对象的实例化和初始化 输出结果 2020501020 构造方法 51 再谈方法的重载 overload 构造方法 classTree intheight Tree prt Plantingaseeding height 0 Tree inti prt CreatingnewTreethatis i feettall height i voidinfo prt Treeis height feetheight voidinfo Strings prt s Treeis height feetheight staticvoidprt Strings System out println s for inti 0 i 5 i Treet newTree i t info t info mytree newTree 52 默认构造方法例classApple intcolor Applea newApple 对象实例的判断 null例Applea if a null System out println Daydream 构造方法 运行时系统自动赋予一个空构造函数如Apple 53 再谈构造方法 构造方法 classCmethod Cmethod booleanb publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false classCmethod Cmethod booleanb publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false classCmethod Cmethod booleanb Cmethod publicstaticvoidmain Stringargs Cmethodc1 newCmethod Cmethodc2 newCmethod false 运行时系统自动赋予一个空构造方法 仅仅当该类没定义构造方法的情况下 54 static变量的初始化 classSmember staticinti 100 staticbooleanb true charc t publicSmember publicstaticvoidmain Stringargs Smemberm1 newSmember Smemberm2 newSmember 不论产生多少个对象 属于类的静态变量只有一份 即只占有一份存储空间 classSmember staticinti staticbooleanb static i 100 b true System out println Instaticblock charc t publicSmember System out println Inconstructor publicstaticvoidmain Stringargs Smemberm1 newSmember Smemberm2 newSmember 输出结果InstaticblockInconstructorInconstructor 55 3 2 6抽象类 abstractclass 一个未完成的类仅仅抽象类可以包含抽象方法 abstractmethods 抽象方法 仅仅申明了方法 但未实现有访问修饰词返回值类型方法名参数列表无方法体 56 3 2 6抽象类 abstractclass abstractclassPoint intx 1 y 1 voidmove intdx intdy x dx y dy alert abstractvoidalert abstractclassColoredPointextendsPoint intcolor classSimplePointextendsPoint voidalert 抽象方法 有访问修饰词 返回值类型 方法名和参数列表 无方法体 57 3 2 6抽象类 abstractclass 抽象类不能被实例化 例Pointp newPoint 子类继承抽象类时 必须重写抽象方法 否则仍为抽象类 abstractclassPoint intx 1 y 1 voidmove intdx intdy x dx y dy alert abstractvoidalert abstractclassColoredPointextendsPoint intcolor classSimplePointextendsPoint voidalert Pointp newSimplePoint 58 抽象类 abstractclass 多态性 abstractclassGraphics abstractvoidparameter abstractvoidarea classRectangleextendsGraphics doubleh w Rectangle doubleu doublev h u w v voidparameter System out println h w voidarea System out println 0 5 h w Rectanglerec newRectangle 5 0 2 0 Circlecir newCircle 3 0 Red Graphics g rec cir for inti 0 i g length i g i parameter g i area classCircleextendsGraphics doubler Stringc Circle doubleu Stringv r u c v voidparameter System out println r c voidarea System out println Math PI r r 运行结果1 02 02 03 0Red28 274333882308138 多态性 polymorphism 应用场合 不同子类可以用不同的方式实现同一共同接口 该共同接口建立了一个基本形式 59 第三章面向对象特征 基本概念类的定义对象类的继承和多态接口和包常用工具类 60 3 3对象 引用对象的变量格式 对象名 变量名引用对象的方法格式 对象名 方法名例1Vectorv newVector v addElement helloworld 例2inta 1 2 3 4 5 intsize a length 例3System out println 61 3 3对象 通过对象引用对象的成员变量和成员方法 classQangle inta h Qangle a 10 h 20 Qangle intx inty a x h y Qangle Qangler a r width h r height voidset intx inty a x h y q1 set 30 40 q1 a 30 q1 h 40 目的相同第一方式更安全 更面向对象 数据封装 直接操纵变量 62 对象的释放 将对象从内存中清除内存的管理 枯燥 容易出错 垃圾回收 GarbageCollection 垃圾搜集器 GarbageCollector 周期性地释放不再被引用的对象 自动完成手动完成 System gc publicstaticvoidgc Runsthegarbagecollector TheJavaplatformallowsyoutocreateasmanyobjectsasyouwant limited ofcourse bywhatyoursystemcanhandle andyoudon thavetoworryaboutdestroyingthem TheJavaruntimeenvironmentdeletesobjectswhenitdeterminesthattheyarenolongerbeingused Thisprocessiscalledgarbagecollection 63 对象的使用 访问对象的私有 private 成员通过定义一个公共方法来实现 classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s Studentst newStudent aloha 001 Stringn st getName st setName csma n st getName 64 对象的使用 对象作为方法的参数 访问权限修饰符 方法返回类型方法名 参数 throws异常名 方法体 参数 类型变量名 类型 基本数据类型 复合类型 对象 参数的传递Passbyvalue 65 例对象用作方法的参数 对象的使用 66 对象的使用 对象的访问对象作为方法的返回值 访问权限修饰符 方法返回类型方法名 参数 throws异常名 方法体 返回类型有返回值 基本数据类型 复合类型 对象 无返回值 void 67 对象的使用 对象作为方法的返回值例 求两点坐标之间的中点坐标思路 x1 y1 和 x2 y2 x y x x1 x2 2 y y1 y2 2Spots1 newSpot 2 3 Spots2 newSpot 4 5 Spots s1 midSpot s2 68 例对象用作方法的返回值 对象的使用 69 对象的使用 数组 类型相同的一列元素简单的数组 publicclassArrayDemo publicstaticvoidmain String args int anArray newint 10 for inti 0 i anArray length i anArray i i System out print anArray i System out println 70 对象的使用 对象数组 classTest publicstaticvoidmain Stringargs inta newint 5 for inti 0 i a length i System out println a i Strings newString 5 for inti 0 i s length i System out println s i System out println s i length 71 对象的使用 对象数组 classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s voiddisplay System out println name id Studentst newStudent 10 for inti 0 i st length i st i newStudent for inti 0 i st length i st i display 72 对象的使用 对象作为另一个对象的成员变量一个对象中包含另一个对象 组合关系 classStudent privateStringname privateStringid Student Strings1 Strings2 name s1 id s2 StringgetName returnname voidsetName Strings name s 73 对象的使用 对象作为另一个对象的成员变量 classMobilePhone privateStringtype privateWatchw MobilePhone Strings type s voidsetWatch Watcha w a longgetTime returnw getTime classWatch longgetTime returnSystem currentTimeMillis MobilePhonemp newMobilePhone nokia Watchw newWatch mp setWatch w longl mp getTime publicstaticlongcurrentTimeMillis thedifference measuredinmilliseconds betweenthecurrenttimeandmidnight January1 1970UTC 74 对象的使用 关键词thisthis指当前对象应用1 加强程序可读性 this可有可无 75 对象的使用 例1 Demo1 java 调用变量 classDemo1 doublex y Demo1 doublei doublej this x i this y j doubleave return x y 2 publicstaticvoidmain Stringargs Demo1d newDemo1 3 4 System out println d ave 76 对象的使用 例2 Demo2 java 调用方法 classDemo2 intx y z Demo2 inta intb x a y b this sort a b voidsort inta intb intt if x y t x x y y t 77 对象的使用 例3 Demo3 java 调用方法 classDemo3 intx y Demo3 inta intb x a y b voidchange inti intj x i y j this sort voidsort intt if x y t x x y y t 78 对象的使用 关键词thisthis指当前对象应用2 对同一个对象执行多次方法调用 classLeaf inti 0 Leafincrement i returnthis voidprint System out println i i Leafx newLeaf x increment increment increment print 79 对象的使用 关键词thisthis指当前对象应用3 在一个构造函数中调用另一个构造函数 classFlower Stringname intprice Flower this tulip 10 Flower Strings inti name s price i voidprint System out println name price publicstaticvoidmain Stringargs Flowerf newFlower f print 80 第三章面向对象特征 基本概念类的定义对象类的继承和多态接口和包常用工具类 81 3 4类的继承 父类与子类的关系 extends 基本内容子类可调用父类的方法和变量 子类可增加父类中没有的方法和变量子类可重新定义父类的静态 实例变量子类可重新定义父类的静态 实例方法继承中的构造方法类成员访问修饰符与继承的关系 82 3 4类的继承 子类可调用父类的方法和变量子类可增加父类中没有的方法和变量 classVehicle Stringbrand voidsetB Strings brand s voidshowB System out println brand classBusextendsVehicle intgas voidsetG intg gas g voidshowG System out println gas Busb newBus b setB audi b setG 100 b showB b showG 子类继承父类的方法和变量 则这些方法和变量就属于子类 则子类对象对这些方法和变量的调用是显而易见的 83 3 4类的继承 子类可重新定义父类中已有的变量父类中同名的变量无效 隐藏 通过 super 变量名 和父类名 变量名 static变量 引用 classA inti 256 j 64 staticintk 32 finalfloate 2 718f classBextendsA publiccharj x finaldoublek 5 staticinte 321 voidshow System out println i j k e voidshowA System out println super j A k super e Bb newB b show b showA 256x5 032164322 718 this 变量名this 方法名this super 变量名super 方法名super super 当前对象 当前对象的父对象 其他 84 继承中的super对象 3 4类的继承 父类 子类 调用父类的变量和方法 调用子类的变量和方法 85 继承中的构造方法 3 4类的继承 publicclassCartoonextendsDrawing Cartoon System out println CartoonConstructor publicstaticvoidmain Stringargs Cartoonc newCartoon classArt Art System out println ArtConstructor classDrawingextendsArt Drawing System out println DrawingConstructor ArtConstructorDrawingConstructorCartoonConstructor 子类的构造方法必须调用父类的构造方法 classDrawingextendsArt Drawing System out println DrawingConstructor ArtConstructorCartoonConstructor publicclassCartoonextendsDrawing Cartoon super System out println CartoonConstructor publicstaticvoidmain Stringargs Cartoonc newCartoon 86 再谈继承中的构造方法 类的继承 publicclassChessextendsBoardGame Chess super 3 System out println CartoonConstructor publicstaticvoidmain Stringargs Chessc newChess classGame Game inti System out println GameConstructor classBoardGameextendsGame BoardGame inti super i System out println BoardGameConstructor 子类的构造方法必须要对父类的构造方法进行调用 不管以任何形式 否则编译出错 87 再谈继承中的构造方法 3 4类的继承 classA A inti classBextendsA B Strings B Strings super 88 3 4类的继承 子类可重新定义父类中已有的静态变量 static classPoint staticintx 2 classTPointextendsPoint staticdoublex 4 7 publicstaticvoidmain String args newTPoint printX voidprintX System out println x Point x 4 72 89 3 4类的继承 子类可重新定义父类中已有的实例变量 classPoint intx 2 classTPointextendsPoint doublex 4 7 voidprintBoth System out println x super x publicstaticvoidmain String args TPointt newTPoint t printBoth System out println t x Point t x 4 724 72 90 类的继承 再谈子类对父类变量的继承 importpoints Point3d classPoint4dextendsPoint3d intw publicvoidmove intdx intdy intdz intdw x dx y dy z dz w dw packagepoints publicclassPoint intx y publicvoidmove intdx intdy x dx y dy packagepoints publicclassPoint3dextendsPoint intz publicvoidmove intdx intdy intdz x dx y dy z dz 目录结构 points Point class points Point3d class Point4d class importpoints Point3d classPoint4dextendsPoint3d intw publicvoidmove intdx intdy intdz intdw super move dx dy dz w dw 编译时报错 x y z仅在本包中才能访问 继承与类成员的访问修饰符有关 91 类的继承 类成员访问修饰符与继承的关系 classPoint intx y privatePoint reset Point intx inty this x x this y y privatevoidreset this x 0 this y 0 classColoredPointextendsPoint intcolor voidclear reset classTest publicstaticvoidmain String args ColoredPointc newColoredPoint 0 0 c reset AnerroroccursbecauseColoredPointhasnoconstructordeclaredwithtwointegerparameters asrequestedbytheuseinmain ThisillustratesthefactthatColoredPointdoesnotinherittheconstructorsofitssuperclassPoint AnothererroroccursbecauseColoredPointdeclaresnoconstructors andthereforeadefaultconstructorforitisautomaticallycreated andthisdefaultconstructorisequivalentto ColoredPoint super whichinvokestheconstructor withnoarguments forthedirectsuperclassoftheclassColoredPoint TheerroristhattheconstructorforPointthattakesnoargumentsisprivate andthereforeisnotaccessibleoutsidetheclassPoint TwomoreerrorsoccurbecausethemethodresetofclassPointisprivate andthereforeisnotinheritedbyclassColoredPoint 92 类的继承 类成员访问修饰符与继承的关系私有的 private 类成员不能被子类继承公共的 public 和保护性的 protected 类成员能被子类继承 且子类和父类可以属于不同的包无修饰的父类成员 仅在本包中才能被子类继承构造函数不是类成员 所以不被继承 packagepoints publicclassPoint publicintx y protectedintuseCount 0 staticprotectedinttotalUseCount 0 publicvoidmove intdx intdy x dx y dy useCount totalUseCount importpoints Point classTestextendsPoint publicvoidmoveBack intdx intdy x dx y dy useCount totalUseCount 93 类的继承 例 classPosition intx y Position intpx intpy x px y py voidshow System out println x y classSpotextendsPosition booleandisplay Spot intsx intsy booleansf super sx sy display sf voidchange intcx intcy x cx y cy classBoxextendsSpot intr Box intbx intby intbr booleanbf super bx by bf r br voidadd intda r da voidred intda r da voidshow System out print 起点 super show System out print 边长 r if display System out println 显示 elseSystem out println 不显示 Spots newSpot 100 100 false s show Boxb newBox 100 100 30 true b show b change 200 300 b add 50 b show 94 继承中类对象作为参数传递 类的继承 classSide voiddisplay System out println 平面 classSpotextendsSide privateintx y Spot intu intv x u y v voiddisplay System out println x y classLineextendsSide privateintx1 y1 x2 y2 Line inta1 intb1 inta2 intb2 x1 a1 y1 b1 x2 a2 y2 b2 voiddisplay System out println x1 y1 System out println x2 y2 Spots newSpot 2 3 Linel newLine 1 2 3 4 display s display l
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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