Ch面向对象程序设计实用.pptx
《Ch面向对象程序设计实用.pptx》由会员分享,可在线阅读,更多相关《Ch面向对象程序设计实用.pptx(116页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1面向对象程序设计整体介绍面向对象程序设计(OOP)将数据(属性)和方法(行为或功能)封装到类(classes)中数据与方法常常是紧密相关的对象(objects):类的实例对象或类本身三个基本特性:封装性、继承性和多态性封装性状态 -成员变量功能 -成员方法继承性在已有类的基础上进行扩展(继承)产生子类实现代码重用和功能的扩充多态性方法重载(overloadoverload)-静态方法覆盖(overwriteoverwrite)-动态第第2页页/共共116页页第1页/共116页2比较结构化程序设计对应的典型的计算机语言,例如:C面向操作(action)的函数(方法)是程序的基本单位面向对象程序
2、设计对应的典型的计算机语言,例如:Java面向对象(object)的类(class)是程序的基本单位方法(函数)被封装在类中数据也常常被封装在类中第第3页页/共共116页页第2页/共116页3面向对象程序设计的主要工作n了解已有类的基本情况(JFCJFC)n扩展(继承)已有类建立自己的新类n创建需要的对象n实现对象之间的交互来完成系统目标第第4页页/共共116页页第3页/共116页4类类是组成JavaJava程序的基本单元JavaJava程序结构如何?类(类型)是用来创建对象(变量)的模板int a;int a;ClassName a;ClassName a;类(class)本身也是一种对象类
3、(class)同时也是实例对象的模板类(class)的基本组成:(成员)域和(成员)方法 每个对象:拥有内存存储成员域/方法静态的成员域/方法属于类其它成员域/方法属于实例对象第第5页页/共共116页页第4页/共116页5类的定义1.1.格式 访问修饰符 class ClassName class ClassName 成员变量声明;/属性-状态 成员方法声明;/功能-行为 2.2.说明访问修饰符可以是publicpublic或省略成员变量和成员方法的声明顺序无严格要求成员变量定义:类型 变量名或带初始化的变量名列表成员方法的定义:返回类型 方法名(参数列表)第第6页页/共共116页页第5页/共
4、116页63.3.举例(Example03_Circle.javaExample03_Circle.java)public class Example0301_Circlepublic class Example0301_Circle double r;double r;double s;double s;void setR(double r1)r=r1;void setR(double r1)r=r1;double getR()return r;double getR()return r;double getS()return Math.PI*r*r;double getS()return
5、Math.PI*r*r;r=5.5r=5.5;/此处的语句是非法的,此处的语句是非法的,WhyWhy?成员变量成员方法举例(ExampleCh03_Circle.java)第第7页页/共共116页页第6页/共116页7变量的种类成员变量(定义在所有方法的外面)a)a)实例成员变量(简称实例变量)b)b)类成员变量(简称类变量 或 静态变量)局部变量(定义在某方法的内部)a)a)包含形式参数(简称形参)注意:在JavaJava中没有全局变量的概念成员变量第第8页页/共共116页页第7页/共116页8n变量的声明n实例变量格式:访问修饰符 类型名 变量名;/public/public,protec
6、tedprotected,省略,privateprivateprivate double r;private double r;int s;int s;n类变量格式:访问修饰符 staticstatic 类型名 变量名;public static int a;public static int a;public static final double PI=3.14;public static final double PI=3.14;n局部变量格式:类型名 变量名;double x;double x;/无访问修饰符成员变量第第9页页/共共116页页第8页/共116页93.3.说明一个类中不允
7、许出现两个同名的成员变量一个方法中不允许出现两个同名的局部变量类的成员变量可以和方法中的局部变量同名public class Tom public class Tom int x=98,y,int x=98,y,x x;/error/error void f1()int void f1()int x x=3;y=x;=3;y=x;void f2()y=x;void f2()y=x;public void f3()public void f3()int int a a=y;=y;for(int i=0;i 10;i+)for(int i=0;i 10;i+)int int a a=0;=0;/e
8、rror/error 成员变量第第10页页/共共116页页第9页/共116页10实例变量和类变量在整个类中有效局部变量只在定义它的复合语句中有效若成员变量与局部变量同名,则在局部变量的作用域内成员变量被隐藏(尽量避免重名)public class Tom public class Tom int int x x=98,y=98,y=a a;/error/error;void f1()int void f1()int x x=3;y=3;y=x x;/y=/y=?void f2()y=void f2()y=x x;/y=/y=?public void f3()public void f3()in
9、t a=y;int a=y;for(int i=0;i 10;i+)int b=0;for(int i=0;i 10;i+)int b=0;System.out.println(System.out.println(“b=b=+b);+b);/error/error成员变量第第11页页/共共116页页第10页/共116页11成员方法定义与C+C+程序不同的是:每个方法都必须隶属于某个类方法的种类实例方法类方法方法定义的格式:方法修饰词 返回类型 方法名(方法的参数列表)局部变量说明部分;/不一定有语句部分;/一般要有,以实现方法的功能 /public/public,protectedprote
10、cted,省略,privateprivate第第12页页/共共116页页第11页/共116页12说明:方法名:任何一个合法的标识符参数列表:用逗号(,)分隔开返回类型:返回数据的数据类型n除了构造方法,一般要求返回类型:要么为void,要么为某种数据类型int、byte、float或Stringn最多只能返回一个值,没有返回值的方法要用voidvoid修饰n类方法和实例方法的一个区别:staticstatic根据需要选择合适的访问修饰符即使某个方法没有形参,但也要保留()public double getArea()public double getArea()double area;doub
11、le area;area=;area=;return area;return area;static void func(int x)static void func(int x)第第13页页/共共116页页第12页/共116页13返回控制如果没有值返回:return;/退出该方法或者遇到该方法的最后一个“”,则退出该方法如果有值返回:return 表达式;/退出该方法返回该表达式的值第第14页页/共共116页页第13页/共116页14方法重载是指一个类中具有同一个名字的方法可有不同的签名(参数不同)返回值类型和参数名不参与比较public void f();public void f();p
12、ublic int f(int a);public int f(int a);public double f(int a,double b);public double f(int a,double b);public double f(double a,int b);public double f(double a,int b);public double f(double a);public double f(double a);public double f(int a);public double f(int a);public double f(int x);public doubl
13、e f(int x);private double f(int x);private double f(int x);static double f(int x);static double f(int x);方法的重载第第15页页/共共116页页第14页/共116页15构造方法构造方法在创建新的实例对象时起作用构造方法通常用来初始化实例对象,例如:初始化成员域或设置工作环境构造方法的特点:与类同名没有返回值可以含有多种构造方法(重载)但必须具有不同的参数列表第第16页页/共共116页页第15页/共116页16默认的构造方法如果没有显式地定义类的构造方法,则系统会为该类定义一个默认的构造方法。
14、该构造方法不含任何参数。这个默认的构造方法首先调用其父类的不含任何参数的构造方法,然后初始化新生成的实例的各个成员域变量 默认值:基本数值类型:0 0;booleanboolean:falsefalse;引用数据类型:nullnull最好自己写构造方法一旦在类中定义了构造方法,系统就不会再创建这个默认的不含参数的构造方法。第第17页页/共共116页页第16页/共116页17构造方法示例public class Circle public class Circle private double r;private double r;public Circle()r=1.0;public Circ
15、le()r=1.0;/(1)/(1)public Circle(double r1)r=r1;public Circle(double r1)r=r1;/(2)/(2)public void Circle()r=5;public void Circle()r=5;/(3)/(3)是否是构造方法?该类共有几个构造方法?若去掉后共有几个构造方法?r=r=?若去掉后共有几个构造方法?r=r=?若去掉和后共有几个构造方法?r=r=?第第18页页/共共116页页第17页/共116页18n最终方法是一种用finalfinal关键字修饰的方法n最终方法不能被子类重写,但可重载public class Tom
16、 public class Tom public public finalfinal void func()void func()最终方法第第19页页/共共116页页第18页/共116页19抽象方法是一种用abstractabstract关键字修饰的方法抽象方法只声明,不实现(没有方法体)抽象方法一般都要被子类重写,抽象类一般由子类继承,且子类要实现其中所有的抽象方法;否则子类也要声明为抽象的抽象类的对象不能用newnew创建抽象类中可以没有抽象方法若一个类中含有抽象方法则该类必须为抽象类(注意TomTom类的定义)思考:finalfinal和abstractabstract是否可同时修饰一个
17、方法public public abstractabstract class Tom class Tom public public abstractabstract void func();void func();抽象方法第第20页页/共共116页页第19页/共116页20对象的概念n对象是一个动态概念,具有产生、使用和消亡的生命周期n通过newnew操作符创建对象n对象属性的使用:n对象名.属性;n对象方法的使用:n对象名.方法名();n当对象不再使用时,将由系统的垃圾回收机制进行回收。对象第第21页页/共共116页页第20页/共116页21n格式:访问修饰符 类名 对象名;n例如clas
18、s ClassName class ClassName private String s;private String s;Circle circle;Circle circle;public String func()public String func()public final ClassName a;public final ClassName a;return return The String is:The String is:+s;+s;n与基本数据类型的变量声明格式类似对象的声明第第22页页/共共116页页第21页/共116页22格式:对象名 =new=new 类的构造方法(实
19、参表););例如nCircle circle1,circle2;Circle circle1,circle2;ncircle1=new Circle();circle1=new Circle();ncircle2=new Circle(5.5);circle2=new Circle(5.5);nString s=new String(String s=new String(Hello!Hello!););对象的创建第第23页页/共共116页页第22页/共116页23n对象赋值格式:对象名 =对象名;对赋值号右边对象的要求:同类或子类n访问变量格式:对象名.变量名对于类变量常用:类名.变量名n访
20、问方法格式:对象名.方法名(实参表)对于类方法常用:类名.方法名(实参表)对象的使用第第24页页/共共116页页第23页/共116页加载类A A时,类变量j j和类方法k k即被分配内存nullnulla1a2A0kj0 xCD010 xAB01nulla2f0 xCD260 xCD010 xCD260 xAB010 xAC02kfji00 xA002a10 xA002k0 xCD01f0 xCD26j0 xAB01i00 xBC010 xA0C0A a1,a2;a1=new A();a2=a1;a2=new A();class A int i;/实例变量 static int j;/类变量
21、public float f(int a1,int a2)/实例方法 public static float k(int a)/类方法 第第25页页/共共116页页第24页/共116页25说明:(1 1)常用类名直接访问该类的静态成员 (2 2)静态方法只能访问静态成员 (3 3)实例方法可以访问静态成员和实例成员public class Test public class Test static int I;static int I;int a;int a;public void f()g();double pi=Math.PI;public void f()g();double pi=Ma
22、th.PI;public static void g()f();/error public static void g()f();/errorint s=I;int s=I;public static void main(String args)public static void main(String args)f();/errorf();/errorg();g();int s=Test.I;int s=Test.I;new Test().f();new Test().f();System.out.println(new Test().I);System.out.println(new T
23、est().I);对象第第26页页/共共116页页第25页/共116页类的创建和对象使用示例编写一个课程类Course,包含:3个成员变量:课程编号(cNumber)、课程名(cName)和学分数(cUnit);1个方法:printCourseInfo:用于输出课程的相关信息;编写Course类的测试程序(main方法),创建课程对象:编号为112101,课程名为Java程序设计,学分为3。要求输出课程的相关信息。26第第27页页/共共116页页第26页/共116页面向过程编程与面向对象编程比较实例:编写求解长方形面积和周长的程序1.1.面向过程的编程方法确定长方形周长和面积的算法。编写两个方
24、法(函数)分别计算长方形的周长和面积求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。2.2.面向对象的编程方法一个长方形可以看成一个长方形对象。一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。将所有长方形的共性抽取出来,设计一个长方形类。通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。27第第28页页/共共116页页第27页/共116页面向过程编程与面向对象编程比较结构化程序设计方法与面向对象程序设计方法地比较:结构化程序设计侧重于功能抽象,强调确定和分解系统的功能。其缺点:功能分解的随意性大系统功能最不稳定,易变化面向对象程序设
25、计侧重于描述系统结构,功能抽象数据抽象,其优点:系统结构相对稳定灵活的机制,如继承、多态和动态绑定有利于修改和扩充系统功能28第第29页页/共共116页页第28页/共116页29主要内容类、域、方法和实例对象继承性多态性封装性包(package)关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想第第30页页/共共116页页第29页/共116页30继承性继承是OOPOOP中实现代码重用的一种方式继承是一种从已有的类创建子类的机制子类继承已有类的状态和行为,并可以扩充由继承而得到的类叫子类,被继承的类叫超类(父类)JavaJav
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ch 面向 对象 程序设计 实用
限制150内