轻工学院Java语言程序设计第四讲.ppt

上传人:s****8 文档编号:69738513 上传时间:2023-01-08 格式:PPT 页数:53 大小:324KB
返回 下载 相关 举报
轻工学院Java语言程序设计第四讲.ppt_第1页
第1页 / 共53页
轻工学院Java语言程序设计第四讲.ppt_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《轻工学院Java语言程序设计第四讲.ppt》由会员分享,可在线阅读,更多相关《轻工学院Java语言程序设计第四讲.ppt(53页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、JavaJava面向对象的特征面向对象的特征(一一)Java程序设计第四讲世界是由什么组成的?名胜名胜人人物品物品 动物动物 ,植物,植物 现实世界中的类和对象现实世界中的类和对象对对象的特征象的特征属性属性属性属性对象具有的各种特征对象具有的各种特征,每个对每个对象的每个属性都拥有特定值象的每个属性都拥有特定值例如:两个人的体重,年龄不一样例如:两个人的体重,年龄不一样60kg王小红王小红属性属性35岁岁收银员小王收银员小王 对对象的特征象的特征方法方法方法方法对象执行的操作对象执行的操作打单打单收银收银方法方法刷卡刷卡收银员王小红收银员王小红封装封装 对象同时具有属性和方法两项特性对象同时

2、具有属性和方法两项特性 对象的属性和方法通常被封装在一对象的属性和方法通常被封装在一起,共同体现事物的特性起,共同体现事物的特性,二者相二者相辅相承,不能分割辅相承,不能分割谁看见过只有“完好的零件和颜色”而不能开动的汽车?类:从对象抽取出类类:从对象抽取出类顾客类顾客类轿车类轿车类类是模版,确定对象将会拥有类是模版,确定对象将会拥有的特征(属性)和行为(方法的特征(属性)和行为(方法)类和类和对象区别对象区别类是抽象的概念,仅仅是模板,比如说:类是抽象的概念,仅仅是模板,比如说:“人人”对象是一个你能够看得到、摸得着的具体实体对象是一个你能够看得到、摸得着的具体实体,小布什小布什普京普京克林

3、顿克林顿奥巴马奥巴马“人人”类类特征:特征:年龄,体重年龄,体重行为:行为:衣,食,住,行衣,食,住,行JavaJava是面向是面向对对象的象的语语言言所有所有JavaJava程序都以类程序都以类classclass为组织单元为组织单元关键字关键字classclass定义自定义的数据类型定义自定义的数据类型publicclassHelloWorldpublicstaticvoidmain(Stringargs)System.out.println(Java);Java类模板类将现实世界中的概念模拟到计算机程序中类将现实世界中的概念模拟到计算机程序中public class public cla

4、ss 类名类名 /定义属性部分定义属性部分 属性属性1 1的类型的类型 属性属性1;1;属性属性2 2的类型的类型 属性属性2;2;属性属性n n的类型的类型 属性属性n;n;/定义方法部分定义方法部分 方法方法1;1;方法方法2;2;方法方法m;m;JAVA JAVA 中类的结构中类的结构 类修饰符类修饰符 classclass 类名类名 extends extends 超类名超类名 implements implements 接口名接口名 成员变量定义;成员变量定义;/表示类和对象的状态表示类和对象的状态构造方法定义;构造方法定义;/构造和初始化新对象构造和初始化新对象方法定义;方法定义;

5、/实现类和对象的行为实现类和对象的行为 类声明部分类声明部分类体部分类体部分定义类定义类定义一个类的步骤定义一个类的步骤1 1、定义类名、定义类名2 2、编写类的属性、编写类的属性3 3、编写类的方法、编写类的方法如何创建和使用对象如何创建和使用对象使用对象的步骤:使用使用对象的步骤:使用newnew创建类的一个对象创建类的一个对象School center=new School();School center=new School();使用对象:使用使用对象:使用“.”进行以下操作进行以下操作给类的属性赋值:对象名给类的属性赋值:对象名.属性属性调用类的方法:对象名调用类的方法:对象名.方法

6、名方法名()()center.schoolNamecenter.schoolName=“北京大学北京大学”;/给属给属性赋值性赋值center.toStringcenter.toString()();/调用类的方法,该方法中的操作将被执行调用类的方法,该方法中的操作将被执行类的例子:class Employeeclass EmployeeString name;String name;String designation;String designation;String department;String department;public Employee(String public Em

7、ployee(String eNameeName,String,String eDesigneDesign,String,String eDepteDept)name=name=eNameeName;designation=designation=eDesigneDesign;department=department=eDepteDept;void void showInfoshowInfo()()System.out.println(nameSystem.out.println(name+is a+is a+designation+at+department+.);designation+

8、at+department+.);把雇员的共同数据及其操作方法抽象出来,封装为把雇员的共同数据及其操作方法抽象出来,封装为Employee类。类。类的例子:续类的例子:续public class public class ClassAndObjectClassAndObject/程序的主类程序的主类 public static void main(String public static void main(String argsargs)Employee e1=new Employee(Employee e1=new Employee(“Robert Robert”,“ManagerMana

9、ger”,“Coffee shopCoffee shop”);/);/对象初始化对象初始化 Employee e2=new Employee(Tom Employee e2=new Employee(Tom,Worker,Coffee shop);/,Worker,Coffee shop);/对象初始化对象初始化 e1.e1.showInfoshowInfo();();e2.e2.showInfoshowInfo();();Robert is a Manager at Coffee shop.Tom is a Worker at Coffee shop.程序运行结果程序运行结果:定义主类,并使

10、用定义主类,并使用Employee类。类。JAVA JAVA 中类的声明中类的声明类修饰符:类修饰符:publicpublic:允许其他类(没有限制)访问本类;允许其他类(没有限制)访问本类;默认:具有包访问性默认:具有包访问性abstractabstract:没有实例的抽象概念类没有实例的抽象概念类(如:如:shapeshape类类),只能创建其子类的实例。目的:使类的结构清,只能创建其子类的实例。目的:使类的结构清晰,实现多态;晰,实现多态;JAVA JAVA 中类的声明(续)中类的声明(续)final:不能再被扩展,不包含子类的类;:不能再被扩展,不包含子类的类;易于安全性的实现,或用于

11、创建固定功能易于安全性的实现,或用于创建固定功能的类;的类;父类继承声明:父类继承声明:extends父类名父类名实现接口实现接口(interface):implements接口接口JAVA JAVA 中类的声明(续)中类的声明(续)例:例:public abstract class shapeclass rectangle extends shapefinal class round_rect extends rectangle?final可以与可以与abstract一起使用吗?一起使用吗?类的成员变量的声明类的成员变量的声明声明成员变量的语法声明成员变量的语法修饰符修饰符 数据类型数据类型

12、 变量名;变量名;修饰符修饰符成员变量的访问控制符成员变量的访问控制符 public:可被所有其他类访问可被所有其他类访问 protected:该类自身、子类、同一包中的其他类该类自身、子类、同一包中的其他类 缺省:可被本包中的类访问缺省:可被本包中的类访问 private:仅可被该类自身访问和修改,不能被其仅可被该类自身访问和修改,不能被其他任何类(包括子类)访问他任何类(包括子类)访问类的封装与数据隐藏类的封装与数据隐藏用用privateprivate将类内部成员变量隐藏起来,只将类内部成员变量隐藏起来,只允许类自身的方法对其操作。允许类自身的方法对其操作。通过设置通过设置public/p

13、rotected/defaultpublic/protected/default的方的方法权限,将这些类的方法作为对外的接口法权限,将这些类的方法作为对外的接口裸露出来,使外界只能通过这些方法来访裸露出来,使外界只能通过这些方法来访问类的数据。问类的数据。成员变量的声明(续)成员变量的声明(续)static:类成员变量类成员变量(静态变量静态变量),对所有的实例一,对所有的实例一致,引用时前缀致,引用时前缀可使用类名可使用类名或对象名或对象名final:程序中不能修改其值,即常量,定义的同时程序中不能修改其值,即常量,定义的同时应对其进行初始化应对其进行初始化transient:非永久存储变量

14、非永久存储变量volatile:并发控制并发控制引用:对象名引用:对象名.变量变量;类名或对象名类名或对象名.静态变量静态变量成员变量的声明:例 class Circleprivate float radius;protected float area;static float max_area100.0f;final float PI=3.14f;.成员变量的访问成员变量的访问classAprotectedintweight;protectedintf(inta,intb)/方法体方法体假设假设B与与A在同一个包中,则在同一个包中,则classBvoidg()Aa=newA();A.weig

15、ht=100;/合法合法A.f(3,4);/合法合法Protected访问性:该类自身、子类、同一包中的其他类访问性:该类自身、子类、同一包中的其他类classAintweight;intf(inta,intb)/方法体方法体假设假设B与与A在同一个包中,则在同一个包中,则classBvoidg()Aa=newA();A.weight=100;/合法合法A.f(3,4);/合法合法缺省:可被本包中的类访问缺省:可被本包中的类访问classTestprivateintmoney;Test()money=2000;privateintgetMoney()returnmoney;publicstat

16、icvoidmain(Stringargs)Testte=newTest();te.money=3000;/合法合法intm=te.getMoney();/合法合法System.out.println(money=+m);private:仅可被该类自身访问和修改,不能被其他任何类(包括子类)访问:仅可被该类自身访问和修改,不能被其他任何类(包括子类)访问classFieldTestprivateintnum=5;publicintget()/正确访问正确访问Returnnum;classTestpublicstaticvoidmain(Stringargs)FieldTestft=newFie

17、ldTest()();intt=ft.get();/可以访问可以访问/ints=ft.num;/不能访问不能访问FieldTest中中privatenumSystem.out.ptintln(“t=”+t);System.out.ptintln(s);方法的定义方法的定义语法:方法的定义语法:修饰符修饰符 返回类型返回类型 方法名(参数列表)方法名(参数列表)throws 例外名例外名 方法体;方法体;方法声明部分方法体部分方法的定义方法的定义 方法的作用:定义对类的成员变量方法的作用:定义对类的成员变量(数据数据)的操作的操作 在在JavaJava中,方法定义的一般格式如下:中,方法定义的一

18、般格式如下:()是方法名,它必须使用合法的标识符。是方法名,它必须使用合法的标识符。说说明明方方法法返返回回值值的的类类型型。如如果果方方法法不不返返回回任任何何值值,它它应应该该声声明明为为voidvoid。JavaJava对对待待返返回回值值的的要要求求很很严严格格,方方法法返返回回值值必必须须与与所所说说明明的的类类型相匹配。型相匹配。方法:语法结构方法的声明(续)方法的声明(续)访问控制符:访问控制符:publicpublic、privateprivate、protectedprotected、缺省缺省publicpublic:可被所有其他类访问可被所有其他类访问protectedpr

19、otected:该类自身、子类、同一包中该类自身、子类、同一包中的其他类的其他类缺省:可被本包中的类访问缺省:可被本包中的类访问privateprivate:仅可被该类自身访问和修改,仅可被该类自身访问和修改,不能被其他任何类(包括子类)访问不能被其他任何类(包括子类)访问static:静态方法,又称类方法静态方法,又称类方法使用类名或对象名作为前缀,建议使用类名使用类名或对象名作为前缀,建议使用类名作前缀作前缀在在static型的方法体中,只能访问型的方法体中,只能访问static变量变量和自身局部变量和自身局部变量优点:不必对类实例化操作就能被其他类使优点:不必对类实例化操作就能被其他类使

20、用该方法。可开发通用工具,如数学计算用该方法。可开发通用工具,如数学计算:Math.sqrt()abstract:只有方法名:只有方法名,没有方法体,要在子类中没有方法体,要在子类中通过重新定义(通过重新定义(override)来实现)来实现final:不能被子类所重新定义(:不能被子类所重新定义(override)native:其他语言实现:其他语言实现synchronized:并发线程控制:并发线程控制方法的声明(续)方法的声明(续)返回类型:返回类型:return、void(无返回值)无返回值)参数列表:参数类型可为类类型参数列表:参数类型可为类类型 throws:通告本方法中会产生的例

21、外(异常)类型,通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。制的例外处理程序段。方法体 在方法体中定义的变量称为局部变量。在方法体中定义的变量称为局部变量。其生命周期:程序流执行进入方法体时创建,其生命周期:程序流执行进入方法体时创建,程序流退出方法时撤消。程序流退出方法时撤消。局部变量使用之前必须初始化。局部变量使用之前必须初始化。局部变量名若与类的成员变量名相同,则后者局部变量名若与类的成员变量名相同,则后者被

22、隐藏(需用被隐藏(需用thisthis显露)。显露)。在方法体中可以访问本类所有的类变量,可以调用在方法体中可以访问本类所有的类变量,可以调用本类中定义的其它方法本类中定义的其它方法(其中,其中,staticstatic方法只能直方法只能直接调用本类的接调用本类的staticstatic方法和方法和staticstatic变量变量)。方法的定义方法的定义(例)(例)例:例:class Circleprivate int radius;static float max_area=100.0f;public void set_radius(int my_radius)radius=my_ radi

23、us;public int get_radius()return radius;public static void setMA(float my_ MA)max_area=my_ MA;/在在static型的方法体中,只能访问型的方法体中,只能访问static变量和本方法内的局部变变量和本方法内的局部变量量成员变量和方法有成员变量和方法有4种访问级别:种访问级别:public,protected,default(package),private;类有两种访问级别:类有两种访问级别:public 或或default。修饰符的作用范围:修饰符的作用范围:修饰符修饰符 同一个类同一个类 同一个包同

24、一个包 子类子类 其它类其它类public Yes YesYes Yesprotected Yes YesYesdefault Yes Yesprivate Yes在谈变量和方法访问控制在谈变量和方法访问控制程序包的访问控制程序包的访问控制privatedefaultprotectedpublicclass Alpha private int iamprivate;private void privateMethod()System.out.println(privateMethod);class Beta void accessMethod()Alpha a=new Alpha();a.ia

25、mprivate=10;a.privateMethod();访问控制例子访问控制例子private /X,Beta/X,Beta类不能访问类不能访问AlphaAlpha类的类的private成员成员class Alpha private int iamprivate;boolean isEqualTo(Alpha anotherAlpha)if (this.iamprivate=anotherAlpha.iamprivate)/anotherAlpha是本类的另一个对象,可以访问本类的是本类的另一个对象,可以访问本类的private成员成员 return true;else return fa

26、lse;访问控制例子访问控制例子private注意:访问控制应用于注意:访问控制应用于class层次,而不是对象层次。层次,而不是对象层次。package Greek;class Alpha int iampackage;void packageMethod()System.out.println(packageMethod);package Greek;/同一个包中同一个包中class Beta void accessMethod()Alpha a=new Alpha();a.iampackage=10;a.packageMethod();访问控制例子访问控制例子package(defaul

27、t),同一个包,同一个包 允许类本身、它的子类、以及同一个包中其余的类访问这些成允许类本身、它的子类、以及同一个包中其余的类访问这些成员。员。package Greek;public class Alpha protected int iamprotected;protected void protectedMethod()System.out.println(protectedMethod);package Greek;/同一个包同一个包class Gamma void accessMethod()Alpha a=new Alpha();a.iamprotected=10;a.protect

28、edMethod();访问控制例子访问控制例子protected/legal/legalpackage Latin;import Greek.*;class Delta extends Alpha void accessMethod(Alpha a,Delta d)a.iamprotected=10;d.iamprotected=10;a.protectedMethod();d.protectedMethod();访问控制例子访问控制例子protected 通过子类对象访问通过子类对象访问 不在同一包中,无法直接访问不在同一包中,无法直接访问位于Greek包中包中位于Latin包中包中方法的参

29、数方法的参数方法的参数要方法的参数要“有名有型有名有型”,参数的参数的作用域在本方法中作用域在本方法中,在方法体中可以,在方法体中可以象方法内的象方法内的局部变量局部变量一样使用。一样使用。方法调用中,基本类型参数是值传递方法调用中,基本类型参数是值传递 。方法是传值的,方法调用不会改变。方法是传值的,方法调用不会改变实参的值。实参的值。引用类型引用类型引用类型引用类型值传送值传送值传送值传送基本类型基本类型基本类型基本类型值传送值传送值传送值传送值传送值传送3.143.14AB0 x2F0 x2FABn方法定义:如方法定义:如 void method(int B)形参形参 n方法调用:如方法

30、调用:如 my_instance.method(A)实参实参 JAVAJAVA的参数传递总是传的参数传递总是传“值值”,但是传值方,但是传值方式也分为两种方式,它们是靠传递参数的类式也分为两种方式,它们是靠传递参数的类型区分的。型区分的。这两种类型分别为这两种类型分别为JAVAJAVA的基础类型和的基础类型和Object(Object(对象对象)类型;基础类型包括类型;基础类型包括boolean,byte,short,char,int,long,float,boolean,byte,short,char,int,long,float,doubledouble,而而ObjectObject就是对

31、象类型,如数组,类就是对象类型,如数组,类对象。对象。在参数为基础类型时在参数为基础类型时,见代码见代码:public class A public class A public static void public static void main(Stringmain(String argarg)intint a=3;a=3;method1(a);method1(a);System.out.println(aSystem.out.println(a););public static void method1(int a)public static void method1(int a)a=

32、4;a=4;此时结果的输出将是此时结果的输出将是1,1,而且只要你的值在而且只要你的值在MainMain函数函数中没变,中没变,a a的值不管怎么传都不会变;的值不管怎么传都不会变;这是因为这是因为a a是传值,而这个是传值,而这个 值值 是是a a的一个拷贝,的一个拷贝,a a的的值在传递后的改变只是改变了值在传递后的改变只是改变了a a的拷贝的内容,并没的拷贝的内容,并没有改变真正的有改变真正的a a的值;的值;publicclassApublicstaticvoidmain(Stringargs)inta=newint1;a0=3;method1(a);System.out.printl

33、n(a0);publicstaticvoidmethod1(inta)a0-;publicclassApublicstaticvoidmain(Stringargs)inta=newint1;a0=3;method1(a);System.out.println(a0);publicstaticvoidmethod1(inta)a=newint0;a0=4;结果分析结果分析左边的结果将是左边的结果将是2 2,右边的结果将是,右边的结果将是3(3(未变未变)原因是:在传递的参数为对象时,这个传递的原因是:在传递的参数为对象时,这个传递的“值值”中放的内容实际上是对象所在的地址,左边中放的内容实际上

34、是对象所在的地址,左边的情况是指针定位到对象的地址后,在上面把内的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变容给改了,所以数组的值后会改变右边的情况为给对象新分配了一个指针到新的地右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的操作都在新的地址上面,址上面去,所以所有的操作都在新的地址上面,并不会影响原来的值。并不会影响原来的值。各变量的作用域例:银行业务的面向对象设计要求:处理帐户存取款、查询帐户和开户日期等面向对象的分析(OOA)对象模型抽象:银行帐户银行帐户对象模型分析:余额、存、取、查余额、存、取、查面向对象的设计设计(OOD)对象模型的实现:

35、类及其成员定义BankAccount类类balance,interest_rate等成员等成员getBalance(),deposit(),etc例:银行业务银行帐户类BankAccount数据:余额、利率操作:查询余额、存款、取款 查询利率、设置利率主类主类UseAccountmain()方法,创建BankAccount类的对象,并完成相应操作UseAccount.javaclass class BankAccountBankAccount/银行账户类银行账户类 private float balance;/private float balance;/默认初值为默认初值为0 0 priva

36、te float interest_rate;private float interest_rate;private private intint day,month,year;day,month,year;public float get_balance()return public float get_balance()return balance;/balance;/查询余额查询余额 public void deposit(float money)public void deposit(float money)balance+=money;/balance+=money;/存钱方法存钱方

37、法 public class public class UseAccountUseAccount /主类主类 public static void main(String public static void main(String argsargs)BankAccountBankAccount myAccountmyAccount=new=new BankAccountBankAccount();();myAccount.depositmyAccount.deposit(1000.0f);(1000.0f);System.out.printlnSystem.out.println(“本账户余

38、额为本账户余额为:$:$+myAccount.get_balancemyAccount.get_balance();();例:银行业务本账户余额为本账户余额为:$:$1000.0程序运行结果:程序运行结果:class class BankAccountBankAccount/银行账户类银行账户类 private float balance;private float balance;private float interest_rate;private float interest_rate;private Date start_date=new Date();private Date sta

39、rt_date=new Date();public float get_balance()return balance;public float get_balance()return balance;public float get_interest_rate()return public float get_interest_rate()return interest_rate;interest_rate;public Date get_start_date()return start_date;/public Date get_start_date()return start_date;

40、/注注意返回值类型意返回值类型 public void public void set_start_date(intset_start_date(int d,intd,int m,m,intint y)y)class Date /class Date /日期类日期类 private private intint day=25,month=10,year=2008;day=25,month=10,year=2008;public String public String showDateshowDate()return year+-+month+-()return year+-+month+-+

41、day;+day;public class public class UseAccountUseAccount /主类主类 public static void main(String public static void main(String argsargs)BankAccountBankAccount myAccountmyAccount=new=new BankAccountBankAccount();();System.out.printlnSystem.out.println(本账户开户日期为本账户开户日期为:+myAccount.get_start_date().showDatemyAccount.get_start_date().showDate();();本账户开户日期为本账户开户日期为:2008-10-25:2008-10-25程序运行结果:程序运行结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com