《面向对象特征 》PPT课件.ppt
《《面向对象特征 》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《面向对象特征 》PPT课件.ppt(157页珍藏版)》请在三一办公上搜索。
1、1,面向对象程序设计(Java),武汉大学国际软件学院 桂浩,2,第三章 面向对象特征,基本概念类的定义对象类的继承和多态接口和包常用工具类,3,基本概念,什么是编程语言?人和计算机进行交流的工具和手段编程语言的发展机器语言:0101001汇编语言:mov,push,add,call第三代语言:高级语言,以C语言为代表,过程式编程语言(Procedural Programming Language)第四代语言:非过程化/面向对象的编程语言语言的发展:抽象的过程,4,面向对象(Object Oriented-OO)面向对象编程(Object Oriented Programming-OOP)面向
2、对象是一种软件开发的方法,“面向对象的分析与设计”(OOA&OOD研究生课程)第一个面向对象的语言:Simula-67第一个成功的面向对象编程语言:SmalltalkC+,JAVA,C#,PERL等用客观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作,基本概念,5,五个基本概念对象类封装性继承性多态性,基本概念,6,对象(object)everything is an object现实世界的对象:桌子、书、自行车、电视、狗、文件、表格、按钮、窗口对象包含两个特性状态:指对象本身的信息(内部信息/内部变量)行为:实现对信息
3、的访问/对象的操作标志:代表对象的标识符山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容,基本概念,7,对象(object)状态变量(variables)行为方法(method)对象就是变量和相关方法的软件集合一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等)程序就是对象的集合,对象之间相互交互和通信完成任务搭积木A program is a bunch of objects telling each other what to do by sending mess
4、ages,基本概念,8,类(class)亚里士多德:the class of fishes and the class of birds现实世界中,存在很多同类的对象,很多桌子、书、自行车一种原型,一种抽象,一种共性,一个模板Every object has a type实例(instance),某类对象的一个特定实体,类是对象的一个抽象表格(类)填入不同的个人信息不同的对象,基本概念,9,封装性对象本身的数据得到保护/隐藏其他对象仅仅需要知道对该对象的访问方法(接口/interface)即可好处模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的
5、形状信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响可重用性黑盒子电脑的DIY喷墨打印机,硒鼓坏/彩色硒鼓,基本概念,10,继承性为什么会有继承?建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减)父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”树型结构(层次化结构)根(基类),基本概念,11,继承性,运输工具,航空运输工具,陆地运输工具,水上运输工具,人力驱动,引擎驱动,二轮,四轮,客运,货运,基本概念,12,继承
6、性多重继承,类A,类B,类C,类D,类F,类G,一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?Java中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性,基本概念,13,多态性表现在继承中方法的重写子类从父类继承(extends扩展)而来多个子类同属一个父类,所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中方法的重载,基本概念,14,多态性多态性在继承中的表现,基本概念,15,多态性,class Square extends Shape void draw()System.out.println(Sq
7、uare.draw();void erase()System.out.println(Square.erase()“);class Triangle extends Shape void draw()System.out.println(Triangle.draw();void erase()System.out.println(Triangle.erase();,class Shape void draw()void erase()class Circle extends Shape void draw()System.out.println(Circle.draw();void erase
8、()System.out.println(Circle.erase();,基本概念,16,多态性,public class Test public static Shape randShape()switch(int)(Math.random()*3)default:case 0:return new Circle();case 1:return new Square();case 2:return new Triangle();,public static void main(String args)Shape s=new Shape9;for(int i=0;i s.length;i+)s
9、i=randShape();for(int i=0;i s.length;i+)si.draw();,Circle.draw()Triangle.draw()Circle.draw()Circle.draw()Circle.draw()Square.draw()Triangle.draw()Square.draw()Square.draw(),基本概念,17,第三章 面向对象特征,基本概念类的定义对象类的继承和多态接口和包常用工具类,18,程序是对象的集合,而对象是类的实例化源程序就是一个个的Java类Java本身提供的类(核心API)见Java文档中描述程序员可以对其进行调用j2sdk1.4
10、.1_01jrelibrt.jar(22.4MB)程序员自己定义的类,类的定义,19,类的定义格式类的修饰符class 类名 extends 父类名 implements接口名 类型成员变量1;类型成员变量2;类型成员方法1(参数1,参数2,)方法体;类型成员方法2(参数1,参数2,)方法体;,类的定义,20,类的定义格式类的修饰符 class 类名 extends 父类名 implements 接口名 类的修饰符public:公共类,可以被其他类所使用,declares that the class can be used by any class regardless of its pac
11、kage(无任何限制)无修饰/默认说明:a class can be used only by other classes in the same package(仅仅能在同一个包中的其他类引用)abstract:declares that the class cannot be instantiated(宣布该类不能被实例化)final:declares that the class cannot be subclassed(宣布该类不能有子类),类的描述,21,类的修饰符final-Declares that the class cannot be subclassed.(宣布该类不能有子
12、类),类的描述,final class ChessAlgorithm.,class BetterChessAlgorithm extends ChessAlgorithm.,Cant subclass final classes:class ChessAlgorithmclass BetterChessAlgorithm extends ChessAlgorithm 1 error,22,类的定义格式类的修饰符 class 类名 extends 父类名 implements 接口名 extends:继承的关系implements:实现哪些接口(interface)的方法,实现多重继承publi
13、c class Test extends Frame implements ActionListener,ItemListener,类的描述,23,一个简单的类class Student String name,stuNumber;double score1,score2,score3;void set1(String s1,String s2)name=s1;stuNumber=s2;System.out.println(name+“+stuNumber);double setScore(double d1,double d2,double d3)double d;score1=d1;sco
14、re2=d2;score3=d3;d=d1 d2+d3;return d;,类的描述,24,包(Package)的概念package org.jalpha;class test 源文件位置:“D:srcorgjalphatest.java”编译方法1:“cd D:srcorgjalpha”“javac test.java”编译方法2:“cd D:src”“javac orgjalphatest.java”class文件位置:“D:srcorgjalphatest.class”运行:“cd D:src”“”,类的描述,25,包(Package)的概念通过包来管理类名空间防止同名类名的冲突层次化的
15、结构,类的描述,对个体(个人和机构)将类文件放在不同的目录下防止重名orgjalphamethod1*.java method2*.java,ABC 公司Engine.java,XYZ 公司Engine.java,需调用Engine.java?,ABC 公司comabcEngine.java,XYZ 公司comxyzEngine.java,26,包(Package)的概念package org.jalpha;class test,类的描述,D:srcorgjalphatest.javaD:srcorgjalphatest1.javaD:srcorgjalphatest2.java,27,对象具
16、有状态和行为成员变量定义访问权限修饰符 类型 变量名;访问权限修饰符 类型 变量名=初值;访问权限修饰符 类型 变量名=初值,变量名=初值;成员方法定义访问权限修饰符 方法返回类型 方法名()throws 异常名 方法体;类型:基本类型,复合类型(数组、类和接口),类成员-变量和方法,28,访问控制修饰符公共访问控制符public 被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身、同一个包中的其他类、其他包中的子类访问私有保护访问控制符private protected该类自身、所有子类访问,类成员变量的访问,
17、29,非访问控制修符静态变量static属于类的变量最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改,类成员变量的访问,30,public(公共变量/公共方法)容许全权访问,无任何限制(先构造对象,再访问),类成员的访问,class A public int x;public void print()class B void test()A a=new A();a.x=100;a.print();,package abc;class A public int x;public void print()package xyz;import ab
18、c.A;class B void test()A a=new A();a.x=100;a.print();,直接访问公有变量x和公共方法print(),31,private(私有变量/私有方法)仅能在其所定义的类中被访问(先构造对象,再访问),D:javac A.javax has private access in A a.x=100;print()has private access in A a.print();2 errors,类成员的访问,class A private int x;private void print()class B void test()A a=new A();
19、a.x=100;a.print();,32,protected(保护变量/保护方法)容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问),类成员的访问,class A protected int x;protected void print()class B void test()A a=new A();a.x=100;a.print();,package abc;class A protected int x;protected void print()package xyz;import abc.A;class B extends A void test(A a,B
20、 b)a.x=100;a.print();b.x=100;b.print();,/illegal/illegal/legal/legal,33,无修饰(友好变量/友好方法)容许类本身以及同一个包中所有类访问,类成员的访问,class A int x;void print()class B void test()A a=new A();a.x=100;a.print();,package abc;class A int x;void print()package abc;class B void test()A a=new A();a.x=100;a.print();,34,小结,*指子类与父类
21、不在同一个包中的情况,类成员变量的访问,35,static(静态变量/静态方法)类的变量/方法,独立于类的对象,可以直接根据类名调用class S static int A=12,B=34;static void print()class Test public static void main(String args)System.out.println(“A=“+S.A+“B=“+S.B);S.print();,类成员变量,36,static(静态变量/静态方法),class Test public void print(int x)System.out.println(x);public
22、 static void main(String args)int x=3;print(x);,D:javac Test.javaTest.java:9:non-static method print(int)cannot be referenced from a static context print(x);1 error,class Test public void print(int x)System.out.println(x);public static void main(String args)int x=3;Test t=new Test();t.print(x);,clas
23、s Test public static void print(int x)System.out.println(x);public static void main(String args)int x=3;print(x);,static方法中仅仅可以调用其他static方法,类成员,37,final 变量/方法final变量:定义一个常数,即变量值不能改变final double AVOGADRO=6.022e23;final类:不能有子类final方法:方法不能被重写(overriding)class ChessAlgorithm.final void nextMove(ChessPie
24、ce pieceMoved,BoardLocation newLocation).,类成员变量,38,小结类:public,abstract,final,无修饰,private类成员publicprotectedprivate无修饰staticfinal,类成员变量,39,方法:对象行为的描述完成某种功能的程序块定义:访问权限修饰符 方法返回类型 方法名()throws 异常名 方法体;方法参数的传递变量的作用域方法的重载(overloading)/重写(overriding)方法的递归调用,类成员方法,40,访问控制修饰符公共访问控制符public 被所有类访问默认访问控制符被同一包中其他类
25、访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身、同一个包中的其他类、其他包中的子类访问私有保护访问控制符private protected该类自身、所有子类访问,类成员方法的访问,41,非访问控制修符静态方法static属于类的方法最终方法final不能被子类重新定义的方法抽象方法abstract只有方法说明,没有具体实现本地方法native以其他语言实现方法功能同步方法synchronized用于多线程程序中的协调和同步,类成员方法的访问,42,例,成员方法,class Test public static void main(String arg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象特征 面向对象特征 PPT课件 面向 对象 特征 PPT 课件

链接地址:https://www.31ppt.com/p-5619407.html