《面向对象特征讲解优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象特征讲解优秀PPT.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4讲讲 面对对象特征面对对象特征(1)武汉高校国际软件学院14.1 基本概念n什么是编程语言?n人和计算机进行沟通的工具和手段n编程语言的发展n机器语言:0101001n汇编语言:mov,push,add,calln第三代语言:高级语言,以C语言为代表,过程式编程语言(Procedural Programming Language)n第四代语言:非过程化/面对对象的编程语言n语言的发展:抽象的过程2n面对对象(Object Oriented-OO)n面对对象编程(Object Oriented Programming-OOP)n面对对象是一种软件开发的方法,“面对对象的分析与设计”(OOA
2、&OOD探讨生课程)n第一个面对对象的语言:Simula-67n第一个成功的面对对象编程语言:SmalltalknC+,JAVA,C#,PERL等n用客观世界中描述事物的方法来描述程序中要解决的问题n万事万物都是对象n程序便是成堆的对象,彼此通过消息的传递,恳求其他对象进行工作 4.1 基本概念(续)3n五个基本概念1.对象2.类3.封装性4.继承性5.多态性4.1 基本概念(续)41.对象(object)2.everything is an object3.现实世界的对象:桌子、书、自行车、电视、狗、文件、表格、按钮、窗口4.对象包含两个特性5.状态:指对象本身的信息(内部信息/内部变量)6
3、.行为:实现对信息的访问/对象的操作7.标记:代表对象的标识符8.山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)9.书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过书目找到感爱好的内容4.1.1 对象51.对象(object)n状态变量(variables)n行为方法(method)n对象就是变量和相关方法的软件集合n一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等)n程序就是对象的集合,对象之间相互交互和通信完成任务n搭积木nA program is a bunch of objects telling each other w
4、hat to do by sending messages4.1.1 对象(续)62.类(class)3.亚里士多德:the class of fishes and the class of birds4.现实世界中,存在很多同类的对象,很多桌子、书、自行车5.一种原型,一种抽象,一种共性,一个模板6.Every object has a type7.实例(instance),某类对象的一个特定实体,类是对象的一个抽象8.表格(类)填入不同的个人信息不同的对象4.1.2 类73.封装性4.对象本身的数据得到爱护/隐藏5.其他对象仅仅须要知道对该对象的访问方法(接口/interface)即可6.
5、好处7.模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形态8.信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响9.可重用性10.黑盒子11.电脑的DIY12.喷墨打印机,硒鼓坏/彩色硒鼓4.1.3 封装性84.继承性5.为什么会有继承?6.建立一个类后,发觉另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减)7.父类和子类,子类继承(拥有)父类全部的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”8.树型结构(层次化结构
6、)9.根(基类)4.1.4 继承性94.继承性运输工具航空运输工具陆地运输工具水上运输工具人力驱动引擎驱动二轮四轮客运货运4.1.4 继承性(续)104.继承性n多重继承类A类B类C类D类F类Gn一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?nJava中仅仅支持单一继承,同时Java接受Interface(接口)实现多重继承而避开父类二义性4.1.4 继承性(续)115.多态性6.表现在继承中方法的重写7.子类从父类继承(extends扩展)而来8.多个子类同属一个父类,全部子类有相同的父类9.继承父类的方法10.在不同的子类中有不同的表现形式11.表现在用一个类中方法的
7、重载4.1.5 多态性125.多态性n多态性在继承中的表现4.1.5 多态性(续)135.多态性class Square extends Shape void draw()System.out.println(Square.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 Shap
8、e void draw()void erase()class Circle extends Shape void draw()System.out.println(Circle.draw();void erase()System.out.println(Circle.erase();4.1.5 多态性(续)145.多态性public class Test public static Shape randShape()switch(int)(Math.random()*3)default:case 0:return new Circle();case 1:return new Square();
9、case 2:return new Triangle();public static void main(String args)Shape s=new Shape9;for(int i=0;i s.length;i+)si=randShape();for(int i=0;i javac A.javax has private access in A a.x=100;print()has private access in A a.print();2 errors4.3.4 private(私有变量/私有方法)class A private int x;private void print()
10、class B void test()A a=new A();a.x=100;a.print();29nprotected(爱护变量/爱护方法)n容许类本身、子类(有确定限制)以及同一个包中全部类访问(先构造对象,再访问)4.3.5 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 xy
11、z;import abc.A;class B extends A void test(A a,B b)a.x=100;a.print();b.x=100;b.print();/illegal/illegal/legal/legal30n无修饰(友好变量/友好方法)n容许类本身以及同一个包中全部类访问4.3.6 无修饰(友好变量/友好方法)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
12、 B void test()A a=new A();a.x=100;a.print();31n小结名称访问权修饰符类本身子类包所有类公共public默认-保护protected*私有private*指子类与父类不在同一个包中的状况4.3.7 小结32nstatic(静态变量/静态方法)n类的变量/方法,独立于类的对象,可以干脆依据类名调用nclass S nstatic int A=12,B=34;nstatic void print()nnclass Test npublic static void main(String args)nSystem.out.println(“A=“+S.A+
13、“B=“+S.B);nS.print();nn4.4 类成员变量33nstatic(静态变量/静态方法)class Test public void print(int x)System.out.println(x);public 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 errorclass Test public void
14、 print(int x)System.out.println(x);public static void main(String args)int x=3;Test t=new Test();t.print(x);class Test public static void print(int x)System.out.println(x);public static void main(String args)int x=3;print(x);static方法中仅仅可以调用其他static方法4.4.1 static(静态变量/静态方法)34nfinal 变量/方法nfinal变量:定义一个
15、常数,即变量值不能变更nfinal double AVOGADRO=6.022e23;nfinal类:不能有子类nfinal方法:方法不能被重写(overriding)nclass ChessAlgorithm n .n final void nextMove(ChessPiece pieceMoved,n BoardLocation newLocation)n .n n .n4.4.2 final 变量/方法35n小结n类:public,abstract,final,无修饰,privaten类成员npublicnprotectednprivaten无修饰nstaticnfinal4.4.3
16、类成员变量小结36n方法:对象行为的描述n完成某种功能的程序块n定义:n访问权限修饰符 方法返回类型 方法名()throws 异样名 n方法体;nn方法参数的传递n变量的作用域n方法的重载(overloading)/重写(overriding)n方法的递归调用4.5 类成员方法37n访问限制修饰符n公共访问限制符public n被全部类访问n默认访问限制符n被同一包中其他类访问n私有访问限制符 privaten被该类自身访问n爱护访问限制符 protectedn该类自身、同一个包中的其他类、其他包中的子类访问n私有爱护访问限制符private protectedn该类自身、全部子类访问4.5.
17、1 类成员方法的访问38n非访问限制修符n静态方法staticn属于类的方法n最终方法finaln不能被子类重新定义的方法n抽象方法abstractn只有方法说明,没有具体实现n本地方法nativen以其他语言实现方法功能n同步方法synchronizedn用于多线程程序中的协调和同步4.5.2 非访问限制修符39n例4.5.2 成员方法调用class Test public static void main(String args)double d_product;Area myArea;myArea=new Area();d_product=myArea.product();System.
18、out.println(“myArea的面积是:”+d_product);class Area double width,height;void setV(double w,double h)width=w;height=h;double product()return width*height;40n方法参数4.5.3 Pass by Valuepublic static void main(String args)int x=3,y=4;Test p=new Test();System.out.println(x+y);p.addI(x,y);System.out.println(x+y)
19、;Vector c=new Vector();c.addElement(s1);c.addElement(s2);System.out.println(c.size();p.addV(c);System.out.println(c.size();import java.util.Vector;class Test private void addV(Vector v)v.addElement(s3);private void addI(int i1,int i2)i1+;i2+;形参和实参D:java Parameter3 43 423留意1:类型匹配留意2:基本类型与复合类型参数传递的结果不
20、同Pass by ValueIn Java methods,arguments are passed by value.When invoked,the method receives the value of the variable passed in.When the argument is of primitive type,pass-by-value means that the method cannot change its value.When the argument is of reference type,pass-by-value means that the meth
21、od cannot change the object reference,but can invoke the objects methods and modify the accessible variables within the object.41n例class Test public static void main(String args)ex A=new ex();A.p();class ex int u,v;void p2(int x,int y)int i,j;for(i=1;i=x;i+)j=y+i;System.out.print(j+“”);void p()u=3;v
22、=2;p2(u,v);System.out.println();u+=v;v*=u;p2(u,v);u=3;v=2;u=5;v=10;输出结果:3 4 511 12 13 14 1542n变量的作用域(成员变量/局部变量)4.5.4 变量的作用域(成员变量/局部变量)43n方法的重载(overload)n方法名相同,但方法的参数不同n方法描述 方法名(标识符)参数类型 方法返回值 n确定值 abs(a)int intn确定值 abs(a)long longn确定值 abs(a)float floatn确定值 abs(a)double doublen npublic static int abs
23、(inta)npublic static long abs(longa)npublic static float abs(floata)npublic static double abs(doublea)4.5.5 方法的重载(overload)44n方法的重写(overriding)n子类重写父类的方法4.5.6 方法的重写(overriding)class Father void display();class Son extends Father void display();Father f=new Father();f.display();Son s=new Son();s.disp
24、lay();454.5.7 构造方法n创建对象/实例化对象new 例1:Apple a=new Apple();(创建对象)例2:Apple a;(对象的说明)a=new Apple();(实例化对象)1.对象的实例化通过构造方法(constructor)来实现2.构造方法的名字与类名相同3.构造方法没有返回值4.构造方法可以有多个,构成方法的重载(overload)46n例:对象的实例化和初始化class jex6_8 public static void main(String args)Qangle q1=new Qangle();Qangle q2=new Qangle(20,50);
25、Qangle q3=new Qangle(q1);System.out.println(q1.width()+“”+q1.height();System.out.println(q2.width()+“”+q2.height();System.out.println(q3.width()+“”+q3.height();class Qangle int a,h;Qangle()a=10;h=20;Qangle(int x,int y)a=x;h=y;Qangle(Qangle r)a=r.width();h=r.height();int width()return a;int height()r
26、eturn h;输出结果:10 201120 501210 204.5.7.1 对象的实例化和初始化47n再谈方法的重载(overload)4.5.7.2 再谈方法的重载(overload)class Tree int height;Tree()prt(“Planting a seeding”);height=0;Tree(int i)prt(“Creating new Tree that is”+i+“feet tall”);height=i;void info()prt(“Tree is”+height+“feet height”);void info(String s)prt(s+“:T
27、ree is”+height+“feet height”);static void prt(String s)System.out.println(s);for(int i=0;i 5;i+)Tree t=new Tree(i);t.info();t.info(“my tree”);new Tree();48n默认构造方法n例 class Apple nint color;nnApple a=new Apple();n对象实例的推断:nulln例 Apple a;n if(a=null)nSystem.out.println(“Day dream”);4.5.7.3 默认构造方法运行时系统自动
28、赐予一个空构造函数如 Apple()49n再谈构造方法4.5.7.4 再谈构造方法 class Cmethod Cmethod(boolean b)public static void main(String args)Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);class Cmethod Cmethod(boolean b)public static void main(String args)/Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);class Cmeth
29、od Cmethod(boolean b)Cmethod()public static void main(String args)Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);运行时系统自动赐予一个空构造方法,仅仅当该类没定义构造方法的状况下504.5.7.5 static变量的初始化class Smember static int i=100;static boolean b=true;char c=t;public Smember()public static void main(String args)Smember m1
30、=new Smember();Smember m2=new Smember();不论产生多少个对象,属于类的静态变量只有一份,即只占有一份存储空间class Smember static int i;static boolean b;static i=100;b=true;System.out.println(“In static block”);char c=t;public Smember()System.out.println(“In constructor”);public static void main(String args)Smember m1=new Smember();Smember m2=new Smember();输出结果In static blockIn constructorIn constructor51第4讲 结束!52