第三章Java面向对象编程.ppt
《第三章Java面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第三章Java面向对象编程.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章:面向对象程序设计第三章:面向对象程序设计内容内容什么是面向对象编程?类和对象继承和多态抽象类和接口什么是面向对象程序设计?什么是面向对象程序设计?面向过程程序设计分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。简而言之,面向过程程序设计是使用过程进行的程序设计。面向对象程序设计(OOP)(OOP)对要处理的问题进行自然分割,按照人的思维方式建立问题领域的模型,对客观实体进行结构模拟和功能模拟,设计出尽可能自然地的表现问题求解方法的问题。面向对象程序设计是使用对象进行程序设计。无论是面向过程还是面向对象,它们都是软件重用的一种思想而已对象
2、是什么?类和对象类和对象对象是什么?对象是什么?对象代表现实世界中可以明确标识的一个实体。例如,一个学生,一张桌子,一个圆,一个按钮甚至一笔贷款都可以看作一个对象。对象有自己独有的特性、状态和行为。对象的状态是由具有当前值的数据域(属性)的集合构成的。对象的行为是由方法的集合定义的。调用对象的一个方法就是要求对象执行一项任务。例如,圆对象具有数据域radius,它是圆的特征属性。圆的一个行为就是使用getArea()方法计算它的面积。类和对象类和对象对象和类的关系对象和类的关系类就是定义同一类型对象的结构。类是一个模版或蓝本,用来定义对象的数据和行为。一个对象就是类的一个实例。我们可以从一个类
3、中创建多个类的实例,创建实例的过程成为实例化Name:CircleDataField:radius is_Method:getArea();Circle1Radius is 10getArea()Circle2Radius is 25getArea()实例化类和对象类和对象类的创建类的创建在Java类中,用变量来定义数据域,方法来定义行为。此外类中还有一个特殊的方法成为构造方法,调用它可以实现类的实例化。因此,Java的类由数据、方法以及构造方法组成。Java中定义类的语法格式为:class 类名 数据;构造方法;方法;类和对象类和对象数据域的定义数据域的定义Java中数据域是用变量来定义的,
4、因此我们可以用定义变量的方式来定义数据域,其格式如下:数据类型 数据名;(数据名的定义遵循Java标识符的规则)例如,我们需要对学生进行模拟建立学生的类,学生的属性是用数据域的集合来表示的,如下所示:public class Student private String name,deparment,sex;private int age;double length;类和对象类和对象方法的定义方法的定义类中定义的方法通常起到两种作用:1.围绕着类的属性进行各种操作;2.与其他的类或对象进行数据交流、消息传递等操作方法的定义分为:方法声明和方法体 返回类型 方法名()方法体;类和对象类和对象类的
5、定义实例类的定义实例例如,定义圆对象的类如下:public class Circle double radius;public Circle()public double getArea()final double PI=3.14;return PI*radius*radius;数据域构造方法方法构造方法是什么?类和对象类和对象构造方法构造方法构造方法是一种特殊的方法,构造方法的特殊之处在于:一、构造方法必须与定义它的类的名字完全相同;二、构造方法没有返回类型,甚至连void都没有;三、构造方法的调用是在创建一个对象时使用new操作符进行的;四、其他规则遵行方法的定义规则;五、构造方法的作用是
6、用来初始化对象;类可以不声明构造方法。这种情况下,类中隐含的声明了一个无参的构造方法,成为默认构造方法。类和对象类和对象构造方法的重载构造方法的重载引例:public class Circle double radius;public Circle()public Circle(double r)radius=r;public double getArea()final double PI=3.14f;return PI*radius*radius;两个构造方法但参数列表不同,这是什么?类和对象类和对象方法的重载方法的重载方法的重载方法的重载是指若干个方法具有相同的名字而具有不同的参数列表。p
7、ublic static int max(int x,int y)return x=y?x:y;public static double max(double x,double y)if(x=y)return x;else return y;类和对象类和对象重载方法的调用重载方法的调用在一类中同时出现两个同名的方法时,系统在调用方法时会根据方法中的参数列表不同自动加载的相应的方法。int max=max(3,4);double max=max(3.0,4.0);当然构造方法的重载也遵行这些规则。类和对象类和对象类的实例化类的实例化Java中创建对象的语法格式为:类名 对象名=new 类名();
8、(调用相应的构造方法进行实例化)Circle circle1=new Circle();Cricle circle2=new Circle(3.25);类和对象类和对象访问对象的数据和方法访问对象的数据和方法对象已经创建后,我们就可以访问对象的数据和方法对象的数据和方法可以用点运算符(.)来访问。访问对象的数据:对象名.数据域名Circle circle1=new Circle(3.12);double radius=circle1.radius;调用对象的方法:对象名.方法名(参数)(方法的调用遵行调用规则)Cricle circle2=new Circle(3.12);double are
9、a=circle2.getArea();类和对象类和对象面向对象编程举例面向对象编程举例public class TestCricle public static void main(String args)Circle circle1=new Circle();System.out.println(“The area of circle of radius”+circle1.radius+“is”+circle1.getArea());Circle circle2=new Circle(6.0);System.out.println(“The area of circle of radius
10、”+circle2.radius+“is”+circle2.getArea();class Cricle double radius;public Circle()radius=1;public Circle(double newRadius)radius=newRadius;public double getArea()final double PI=3.14f;return PI*radius*radius;类和对象类和对象类成员的修饰符类成员的修饰符在Java程序设计的过程中,我们需要类的成员的作用域以及类的成员归属问题做出限制,这样做将便于类的逻辑严密性。Java中的修饰符可分为两类:
11、访问控制修饰符用来控制对数据域、方法和类的访问;类型说明符用来定义类的成员的特殊性质。访问控制修饰符有:public、protected、private、(default)类型说明符有:final、abstract、static类和对象类和对象访问控制符访问控制符publicpublic、privateprivate、defaultdefaultpublic修饰的类、数据和方法可以被任何类访问;private修饰的数据和方法只能被当前类中的成员使用;(defualt)修饰的类、数据和方法可以被包中任何类访问public class C1 public int x;int y;private i
12、nt z;public void m1()void m2()private void m3()public class C2 void aMethod()C1 o=new C1();能访问o.x;能访问o.y;不能访问o.z;可调用o.m1();可调用o.m2();不可调用o.m3();public class C3 void aMethod()C1 o=new C1();能访问o.x;不能访问o.y;不能访问o.z;能调用o.m1();不能调用o.m2();不能调用o.m3();类和对象类和对象访问控制符(访问控制符(defaultdefault)如果类没有声明为public,那么仅能同一包
13、中被访问。class C1 public class C2 可以访问C1的对象;public class C3 不能访问C1的对象;可以访问C2的对象;类和对象类和对象访问控制符应用举例访问控制符应用举例package p1;package p1;public class C1 class C2 public int x;public static void main(String args)int y;C1 o=new C1();private int z;System.out.println(o.x);public void m1()System.out.println(o.y);Syst
14、em.out.println(“m1被调用”);System.out.println(o.z);o.m1();void m2()o.m2();System.out.println(“m2被调用”);o.m3();private void m3()System.out.println(“m3被调用”);package p2;import p1.*;public class C3 public static void main(String args)C1 o=new C1();C2 o1=new C2();类和对象类和对象类型说明符类型说明符staticstaticCircle c1=new C
15、ricle();Circle c2=new Circle(2.5)c1中的radius独立于c2中的radius,存储在不同的内存空间上。c1中radius的变化不会影响c2中的radius,反之亦然。radius属于类中一个特定的实例,称为实例变量radius=0Circle1radius=2.5Circle2类和对象类和对象静态成员静态成员如果想让一个类中的所有实例共享数据,就可以用静态变量。静态变量将变量值存储于类的公用内存中。如果某个对象修改了静态变量的值,同一个类的所有对象都会受到影响。如果想无需创建类的实例就调用类的方法,同样我们也可以将方法定义为静态方法。要声明一个静态变量或静态
16、方法,只需在变量或方法说明中加上修饰符static类和对象类和对象静态变量、常量、方法静态变量、常量、方法静态变量numberofObjects、常量PI和静态方法getNumberofObjects可以声明如下:public static int numberofObjects;public final static double PI=3.14;public static int getNumberofObjects()return numberofObjects;静态成员的使用:类名.静态数据名或对象名.静态数据名 类名.静态方法名()或对象名.静态方法名()静态变量、常量既可以在静态方
17、法中使用也可以在实例方法中使用,实例变量、常量只能在实例方法中使用。类和对象类和对象静态成员应用举例静态成员应用举例public class Circle public static int numberOfObjects;public final static double PI=3.14;double radius;public Circle()numberOfObjects+;public Circle(double newRadius)radius=newRadius;numberOfObjects+;public static int getNumberOfObjects()retu
18、rn numberOfObjects;public double getArea()return PI*radius*radius;类和对象类和对象静态成员应用举例静态成员应用举例public class TestCircle public static void main(String args)Circle c1=new Circle();System.out.println(“Before creating c2”);System.out.println(“c1 is:radius(”+c1.radius+“)and number of Circle objects(”+c1.numbe
19、rOfObjects+“)”);System.out.println(“The number of Circle objects is”+Circle.numberOfObjects);Circle c2=new Circle(5.0);c1.radius=9;System.out.println(“After creating c2 and modifying c1s radius to 9”);System.out.println(“c1 is:radius(”+c1.radius+“)and number of Circle objects(”+c1.numberOfObjects+“)
20、”);System.out.println(“c2 is:radius(”+c2.radius+“)and number of Circle objects(”+c2.numberOfObjects+“)”);System.out.println(“The number of Circle Objects is”+Circle.numberOfObjects);类和对象类和对象参数传递参数传递引例:public class Circle public double radius;public Circle(double newRadius)radius=newRadius;public dou
21、ble getArea()final double PI=3.14;return PI*radius*radius;类和对象类和对象参数传递参数传递引例:public class example public static void main(String args)double radius=2.5;Circle c=new Circle(radius);double area1=getArea(radius);System.out.println(“The area is”+area1);System.out.println(“After invoke,the radius is”+rad
22、ius);double area2=getArea(c);System.out.println(“The area is”+area2);System.out.println(“After invoke,the radius is”+c.radius);public double getArea(double radius)final double PI=3.14F;double area=PI*radius*radius;radius=radius+1.0f;return area;public double getArea(Circle circle)double area=circle.
23、getArea();circle.radius=circle.radius+1.5f;return area;思考一下,两次求面积之后圆的半径发生的变化?基本数据类型和引用数据类型基本数据类型和引用数据类型每个变量代表一个存储值的内存单元。对于基本数据类型变量而言,对应内存所存储的值是基本数据类型,它的值为对应内存中的所存储的值。对于引用数据类型变量而言,它的值是一个引用,是对象的存储地址。基本数据类型 对象类型 int i=1;Circle c i c 1引用c:Circleradius=1基本数据类型和引用数据类型的赋值基本数据类型和引用数据类型的赋值int i=1,j=2;Circle
24、c1=new Circle(2.5);i=j;Circle c2=new Circle(4.0);i j c1=c2;c1 c2 i j1222c1:Circleradius=2.5c1:Circleradius=4.0类和对象类和对象参数传递参数传递Java中参数的传递有两种方式:按数值进行传递:传递的方向是单向的,只能有实参传给形参(将实参值的一个副本传给了形参),而不能有形参传给实参,因此,方法中形参发生的任何变化将不会影响到实参的值,如上例中double area1=getArea(radius)中采用的方式。按引用值进行传递:将引用数据类型的引用值传入方法内部,形参在方法中的变化将会
25、影响到实参中的内容。如上例中double area2=getArea(c)中采用的方式。类和对象类和对象对象作为方法的参数对象作为方法的参数对象作为方法的参数,实参与形参之间的参数传递是通过引用值的传递的来完成的。以引例中的double area2=getArea(c)为例来详细说明其参数传递过程以及形参和实参之间的相互作用。radius=2.5cint radius=2.5;int radius=2.5;Circle c=new Circle(radius);Circle c=new Circle(radius);circle=c;circlecircle.radius=circle.rad
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 Java 面向 对象 编程
限制150内