1、类与对象,数据和算法的封装 类的结构 构造方法与对象的创建 对象的引用和实体 对象的组合 实例成员与类成员 THIS关键字 方法重载 访问权限,类和对象,对象表示现实世界中某个具体的事物。 抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程。 对象具有两方面的含义:在现实世界中: 是客观世界中的一个实体在计算机世界中: 是一个可标识的存储区域,类,类是用来描述一组具有共同状态和行为的对象的原型,是对这组对象的抽象表达。让具有共同特征的对象形成类,它定义了同类对象共有的变量和方法。通过类可以生成实例,这便是对象。Java编程就是设计类,在编程中可以采用自定义方法或继承方法设计一个类。此外,
2、还可在编程时利用类来创建对象,然后改变对象变量值和调用对象方法来实现程序的某些功能,对象,现实世界中,对象(Object)就是客观存在的某一事物。在面向对象程序设计中,对象是一组数据和相关方法的集合。程序中可通过变量向其传递或获取数据,而通过调用其中的方法执行某些操作。在Java中,对象必须基于类来创建。,类和对象 2-2,类是具有共同属性和行为的对象的抽象。 类可以定义为数据和方法的集合。 类也称为模板,因为它们提供了对象的基本框架。,类,对象,抽象,实例化,属性或状态,操作或行为,数据或变量,方法,封装的实体=数据+方法,数据和算法的封装,封装(Encapsulation )是将某些数据以
3、及这些数据上的操作封装在一个类中。编写类的目的是使程序员不必知道数据操作的细节,就可以使用这些数据以及相关的操作。该机制保证了程序和数据都不受外部干扰且不被误用。,类的结构,一、类的定义: Class 类名 /类的声明. /类体 二、类体 类的目的:抽象出一类事物共有的属性和行为,并用一定的语法格式来描述所抽象出的属性和行为。 抽象的关键字:属性和行为,即数据以及在数据上所进行的操作。1、变量的声明:用来存储数据(体现属性值) 2、方法的定义:对类中声明的变量进行操作,即给出算法(体现行为)。,创建类,class name type variable1;type variableN;type
4、methodname1(parameter-list)/方法体type methodnameN(parameter-list)/方法体 ,在类中,属性是通过成员变量体现的,而操作是用成员函数(又称为方法)实现的。,Java中定义类的通用格式:,成员变量(对象属性),成员方法 (对象行为或操作),定义方法,定义方法的一般格式:access type methodname1(parameter-list)/方法体 ,发往某个对象的消息对应于一个方法调用。作为对消息的响应,对象将执行一个类似于过程体的方法。方法是包含在类中的函数。,举例: public void setdate(int day, i
5、nt month, int year)day=23; month=7; year=2003; ,/Circle.java Class Circle /类声明 Double radius; /圆的半径 Double getArea() /计算面积的方法 Double area=3.14*r*r; Return area; /App4_1.java Public class App4_1 Public static void main(String args) Circle tomCat; /声明一个名字是tomCat的对象 tomCat=new Circle(); /创建tomCat对象 tom
6、Cat.radius =12.67; /给tomCatcf 对象的r成员变量赋值 Double area=tomCat.getArea(); System.out.println(“tomCat的面积:”+area); 小结:对象通过“”运算符操作自已的变量和方法。 对象变量 对象方法,/Rectangle类Class Rectangle Double width; /矩形的宽(变量声明) Double height; /矩形的高(变量声明)Double computerArea() /计算面积(方法) Double area=width*height; Return area; Double
7、 getPerimeter() /计算周长(方法) Double perimeter=2*height+2*width; Return perimeter; ,成员变量(对象属性),成员方法 (对象行为或操作),成员变量和方法,注意:成员变量在整个类内都有效,其有效性与声明它的先后位置无关。(习惯是先声明变量再定义方法) Class Rectangle Double compterArea() /计算面积(方法) Double area=width*height;return area;Double height;Double getPerimeter() /矩形的高(变量声明) Double
8、 perimeter=2*(height+width); /计算周长(方法) Return perimeter; Double width; /矩形的宽(变量声明) ,局部变量,局部变量:在方法的方法体中声明的变量以及方法的参数。 特点:局部变量只在方法内有效,且与其声明的位置有关。指出下列局部变量哪些无效? Public class A Int m=10,sum=0;Void f()int z=10;z=2*m+z;for(int t=0;tm;t+)sum=sum+t; m=t; void g(int n)sum=n+1;sum=z+10; ,非法,因为t已无效,非法,因为z已无效,类结构
9、表示图,类的UML图,类的基本结构图,类体由两部分构成:变量的声明和方法的定义,声明成员变量时可赋予它初值,Class Aint a=12; Class Aint a;a=12; 注意:语句不是变量的声明,只能出在方法体中,正确,错误!因这是赋值语句,构造方法与对象的创建,构造方法的特点: 1、方法名与类名完全相同 2、没有数据类型 3、可编写多个构造方法,但得保证其参数不同Class Circledouble radius;Circle( ) /无参构造方法radius=1;Circle(double r) /有参构造方法 radius=r; 注意:若类中没有构造方法,系统会默认该类只有一个
10、构造方法,该构造方法是无参数的。class Point Double x,y; ,隐含构造方法:Point( ) ,创建对象,定义一个类后可以用类声明变量,这个变量称之为对象,类是创建对象的模板。声明对象: Circle tomCat; 创建对象: 使用new运算符和类的构造方法来创建对象 tomCat=new Circle(); /new为对象分配变量注意:以上 两行可简写为:Circle tomCat=new Circle();,未分配变量的对象,为变量分配变量后的内存模型,使用不同的构造方法创建的对象不同,Circle tomCat=new Circle( );Circle jerryM
11、ouse=new Circle(1 .58);,创建多个对象的内存模型,对象的引作和实体,1、引用与实体 类是体现封装一种数据类型,类声明的变量称为对象,对象中负责存放引用,以确保可以操作分配给它的变量以及调用类中的方法。 分配给对象的变量习惯地称为对象的实体。2、具有相同引用的对象 一个类声明的两个对象如果具有相同的引用,二者就具有完全相同的变量(实体)class Pointint x,y;Point(int a,int b)x=a;y=b; ,构造方法,P1=p2;,对于Point类创建的两个对象p1和p2 Point P1=new Point(5,15); Point p2=new Po
12、int(8,18);P1和p2的引用,对象的组合,一个类的成员变量可以是某个类声明的变量,即可以是对象。当A类把B类的对象作为自已的成员时,称A类的对象组合了B类的对象。比如:公司组合了员工,收音机组合了电池/Circle.java Public class Circle Double radius; Circle(double r) Radius=r; Double getArea()return 3.14*radius*radius; /Circular.java Public class CircularCircle bottom; /圆锥的底bottom是Circle类型的对象doub
13、le height; Circular(Circle c, double h) /构造方法,将Circle类的实例的引用传递给bottombottom=c;height=h;double getVolme() Return bottom.getArea()*height/3.0; ,/App4_10.java Public class App4_10 Pulbic static void main(String args)Circle circle= /创建circle对象 Circular circular= /*创建circular对象,并将circle引用传递给构造方法的参数c。*/ S
14、ystem.out.print(“圆锥的体积:%5.5fn”,circular.getVolme); Circular.bottom.radius =100; System.out.printf(“圆锥的面积: %5.5fn”,circular.getVolme); 执行代码: Circle circle=new Circle();执行代码: Circular circular=new Circular(circle,20);,代码,代码,执行代码: Circle circle=new Circle();执行代码: Circular circular=new Circular(circle,2
15、0);,执行代码后内存中诞生的对象模型,执行代码1后内存中诞生的对象模型,如果一个对象a组合了对象b,那么对象a就可以委托 对象b调用其方法,即对象 以组合的方式复用对象的方法。通过组合对象来复用有如下特点: 1、“黑盒”复用,当前对象只能委托所包含的对象用其方法,对其方法法的细节一无所知。 2、当前对象随时可以更换所包含的对象,即对象与所包含的对象属于弱耦合关系。,组合关系的UML图,/App_Radio_Battery.java 见书本P59的实践环节 /上机调式下列程序,注意程序是如何模拟收音机使用电池的 public class Batteryint electricityAmount
16、;Battery(int amount)electricityAmount=amount; public class Radiovoid openRadio(Battery battery)battery.electricityAmount=battery.electricityAmount_10; /消耗了电量 public class AppRadioBatterypublic static void main(String args)Battery nanfu=new Battery(100); /创建电池对象System.out.println(“南孚电池的储电量是:“+nanfu.electricityAmount);Radio radio=new Radio(); /创建收音机对象System.out.println(“收音机开始使用南孚电池“);radio.openRadio(nanfu); /打开收音机,将nanfu的引用传递给了参数battery System.out.println(“目前南孚电池的储电量是:“nanfu.electricityAmount); ,