第4章深入面向对象的程序设计优秀PPT.ppt

上传人:石*** 文档编号:74024357 上传时间:2023-02-24 格式:PPT 页数:73 大小:2.75MB
返回 下载 相关 举报
第4章深入面向对象的程序设计优秀PPT.ppt_第1页
第1页 / 共73页
第4章深入面向对象的程序设计优秀PPT.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《第4章深入面向对象的程序设计优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第4章深入面向对象的程序设计优秀PPT.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第4章章深入面向对象深入面向对象的程序设计的程序设计现在学习的是第1页,共73页学习提要学习提要1.1.熟练掌握继承关系的定义、属性的继承和隐藏、方法的继熟练掌握继承关系的定义、属性的继承和隐藏、方法的继承与覆盖;承与覆盖;2.2.理解多态的含义和用法,包括方法的重载、构造函数的继理解多态的含义和用法,包括方法的重载、构造函数的继承与重载、承与重载、thisthis与与supersuper、父类对象与子类对象的使用和转、父类对象与子类对象的使用和转化;化;3.3.掌握包的定义与使用方法;掌握包的定义与使用方法;4.4.熟悉接口与多重继承的关系、接口的定义和使用;熟悉接口与多重继承的关系、接口

2、的定义和使用;5.5.掌握异常的定义和使用方法。掌握异常的定义和使用方法。现在学习的是第2页,共73页4.1Java的继承与多态的继承与多态4.1.1 4.1.1 继承与多态的概念继承与多态的概念(1 1)继承)继承 继承是两个类继承是两个类(或接口或接口)之间的一种关系,通过之间的一种关系,通过extendsextends关键字关键字来实现,被继承的类称为父类或超类,来实现,被继承的类称为父类或超类,继承了父类的所有数据和继承了父类的所有数据和操作的类称为子类操作的类称为子类。新定义的子类可以从父类。新定义的子类可以从父类继承所有非继承所有非privateprivate的属性和方法的属性和方

3、法作为自己的成员。一个父类可以同时拥有多个子作为自己的成员。一个父类可以同时拥有多个子类。类。单重继承:单重继承:任何一个类都只有一个单一的父类。任何一个类都只有一个单一的父类。程序结构为树状,比较简单。程序结构为树状,比较简单。多重继承:多重继承:一个类可以有一个以上的父类,其静态的一个类可以有一个以上的父类,其静态的 数据属性和操作从所有这些父类中继承。数据属性和操作从所有这些父类中继承。程序结构为网状,比较复杂。程序结构为网状,比较复杂。现在学习的是第3页,共73页图图4.1各种电话卡类及其间的继承关系各种电话卡类及其间的继承关系现在学习的是第4页,共73页 在面向对象的程序设计中,在面

4、向对象的程序设计中,采用继承的机制来组织、设计系统中的采用继承的机制来组织、设计系统中的类类的优点的优点:可以提高程序的抽象程度,使之更接近于人类的思维方式;可以提高程序的抽象程度,使之更接近于人类的思维方式;使得程序结构清晰,降低编码和维护的工作量。使得程序结构清晰,降低编码和维护的工作量。注意:注意:(1)Java(1)Java只支持只支持单重继承,单重继承,而采用而采用接口接口来实现来实现多重继承多重继承。class subClass class subClass extendsextends SuperClass SuperClass implementsimplements inte

5、rfaceinterface1 1,interface,interface2 2,interfaceinterfacen n/SuperClass/SuperClass和各个接和各个接口中的非口中的非privateprivate的属性和方法均被继承(实现)!的属性和方法均被继承(实现)!(2)(2)而而C+C+中一个类中一个类可以有多个父类。可以有多个父类。现在学习的是第5页,共73页(2 2)多态)多态 多态是针对方法而言的,是指同名的方法具有多种表现形态。多态是针对方法而言的,是指同名的方法具有多种表现形态。实现多态的途径:实现多态的途径:1 1)覆盖()覆盖(override overr

6、ide)在子类中对在子类中对从父类继承从父类继承的方法进行改写。的方法进行改写。2 2)重载()重载(overload overload)在同一个类中定义在同一个类中定义多个同名多个同名的方法。的方法。比如,程序中定义多个名为比如,程序中定义多个名为 print print方法,用来打印不同类型的方法,用来打印不同类型的数据,如字符型、数值型等。数据,如字符型、数值型等。区分同名方法的措施:区分同名方法的措施:采用不同的形式参数列表,包括形式参采用不同的形式参数列表,包括形式参数的个数、类型、顺序的不同。数的个数、类型、顺序的不同。现在学习的是第6页,共73页4.1.2属性的继承与隐藏属性的继

7、承与隐藏(1 1)属性的继承:)属性的继承:子类从父类继承属性而不是把父类属性的定义部子类从父类继承属性而不是把父类属性的定义部分复制一遍,可以减少程序维护的工作量。分复制一遍,可以减少程序维护的工作量。(2 2)属性的隐藏:)属性的隐藏:对子类从父类继承来的属性变量重新加以定义。对子类从父类继承来的属性变量重新加以定义。即:子类定义了与父类同名的属性变量即:子类定义了与父类同名的属性变量,即出现了子类变量对,即出现了子类变量对同名父类变量的同名父类变量的隐藏。隐藏。如何区分:如何区分:子类执行从父类所继承的方法时,处理的是继承自父类的变量。子类执行从父类所继承的方法时,处理的是继承自父类的变

8、量。子类执行它自己定义的方法时,操作的是自己定义的变量,而把子类执行它自己定义的方法时,操作的是自己定义的变量,而把从父类继承的变量从父类继承的变量“隐藏隐藏”起来。起来。现在学习的是第7页,共73页子类覆盖父类的方法时,要注意不能降低父类方法子类覆盖父类的方法时,要注意不能降低父类方法的访问权限的访问权限!(1)classSuperClasspublicvoidmethod1()voidmethod2()classSubClassextendsSuperClassvoidmethod1()/降低了访问权限,不允许!降低了访问权限,不允许!publicvoidmethod2()/提升了访问权限

9、,允许!提升了访问权限,允许!StringtoString()return“Hello,World!”;/不允许不允许!以上覆盖的使用错误,如何改正呢?以上覆盖的使用错误,如何改正呢?现在学习的是第8页,共73页同一个类中方法重载时,要注意参数的类型、顺序、同一个类中方法重载时,要注意参数的类型、顺序、个数要体现不同!个数要体现不同!请分析以下程序段中的错误原因。请分析以下程序段中的错误原因。importjava.util.*;classJustInOneClasspublicvoidoutput(Stringstr)publicvoidoutput(Datedate)publicvoidou

10、tput(Doubled)publicvoidoutput(inti)publicvoidoutput(intj)publicvoidoutput(floatf)publicclasstestpublicstaticvoidmain(Stringargs)现在学习的是第9页,共73页例:例:TestInherit.java/类的继承,属性的继承与隐藏类的继承,属性的继承与隐藏importjava.util.*;publicclassTestInheritpublicstaticvoidmain(Stringargs)D200_Cardmy200=newD200_Card();/有卡号的有卡号的

11、200卡卡my200.balance=50.0;System.out.println(“父类被隐藏的金额为:父类被隐藏的金额为:”+my200.getBalance();/执行继承执行继承自父类的方法,操作父类的变量自父类的方法,操作父类的变量System.out.println(子类本身的金额为:子类本身的金额为:+my200.balance);System.out.println(子类继承的密码为:子类继承的密码为:+my200.password);if(my200.performDial()/执行子类实现了的抽象方法,操作子类的变量执行子类实现了的抽象方法,操作子类的变量System.o

12、ut.println(子类的剩余金额为:子类的剩余金额为:+my200.balance);System.out.println(父类被隐藏的金额仍为:父类被隐藏的金额仍为:+my200.getBalance();现在学习的是第10页,共73页abstractclassPhoneCard/定义电话卡抽象类定义电话卡抽象类doublebalance=60;/公共属性公共属性abstractbooleanperformDial();doublegetBalance()returnbalance;abstractclassNone_Number_PhoneCardextendsPhoneCard/定义

13、无号电话卡抽象类定义无号电话卡抽象类StringphoneSetType;StringgetSetType()returnphoneSetType;abstractclassNumber_PhoneCardextendsPhoneCard/定义有号电话卡抽象类定义有号电话卡抽象类longcardNumber;intpassword=111;StringconnectNumber;booleanconnected;booleanperformConnection(longcn,intpw)if(cn=cardNumber&pw=password)connected=true;returntrue

14、;elsereturnfalse;现在学习的是第11页,共73页classmagCardextendsNone_Number_PhoneCard/定义磁卡,无号电话卡抽象类的子类定义磁卡,无号电话卡抽象类的子类StringusefulArea;booleanperformDial()if(balance0.9)balance-=0.9;returntrue;elsereturnfalse;classIC_CardextendsNone_Number_PhoneCard/定义定义IC卡,无号电话卡抽象类的子类卡,无号电话卡抽象类的子类booleanperformDial()if(balance0

15、.5)balance-=0.5;returntrue;elsereturnfalse;现在学习的是第12页,共73页classIP_CardextendsNumber_PhoneCard/定义定义IP卡,有号电话卡抽象类的子类卡,有号电话卡抽象类的子类DateexpireDate;booleanperformDial()if(balance0.3&expireDate.after(newDate()balance-=0.3;returntrue;elsereturnfalse;classD200_CardextendsNumber_PhoneCard/定义定义200卡,有号电话卡抽象类的子类卡

16、,有号电话卡抽象类的子类doubleadditoryFee=0.6;doublebalance;/子类的属性子类的属性,体现属性隐藏体现属性隐藏booleanperformDial()if(balance(0.5+additoryFee)balance-=(0.5+additoryFee);returntrue;elsereturnfalse;现在学习的是第13页,共73页4.1.3 4.1.3 方法的继承、重载与覆盖方法的继承、重载与覆盖(1 1)方法的继承)方法的继承 父类的非私有方法,可以被子类所继承。父类的非私有方法,可以被子类所继承。(2 2)方法的覆盖)方法的覆盖 子类定义与父类同

17、名的方法,除非使用子类定义与父类同名的方法,除非使用supersuper关键字或父类名为前缀,关键字或父类名为前缀,否则调用的都是自己定义的方法。否则调用的都是自己定义的方法。注意:注意:子类在重新定义父类已有的方法时应保持与父类完全相同的子类在重新定义父类已有的方法时应保持与父类完全相同的方法头声明。方法头声明。(如从如从objectobject继承来的继承来的toString()toString()方法方法)(3 3)方法的重载)方法的重载 方法的重载是方法的重载是同一个类中多个同名方法同一个类中多个同名方法共存的情况,需通过参数共存的情况,需通过参数列表(包括类型、顺序和数目)来区分不同

18、的方法。列表(包括类型、顺序和数目)来区分不同的方法。注意:注意:不能通过方法的返回值来区分同名的不同方法。不能通过方法的返回值来区分同名的不同方法。现在学习的是第14页,共73页例:例:TestOverride.javaTestOverride.java/方法的继承与覆盖,子类出现与父类中完全同名、同参数的方法方法的继承与覆盖,子类出现与父类中完全同名、同参数的方法public class TestOverridepublic class TestOverride public static void main(String args)public static void main(Stri

19、ng args)PhoneCard myCard=new PhoneCard();PhoneCard myCard=new PhoneCard();D200_Card my200=new D200_Card();D200_Card my200=new D200_Card();System.out.println(System.out.println(直接访问父类的方法改变金额为:直接访问父类的方法改变金额为:+myCard.getBalance();+myCard.getBalance();System.out.println(System.out.println(直接访问子类的属性金额为:直

20、接访问子类的属性金额为:+my200.balance);+my200.balance);System.out.println(System.out.println(调用子类方法(覆盖父类)改变的金额为:调用子类方法(覆盖父类)改变的金额为:+my200.getBalance();+my200.getBalance();my200.balance=50.0;my200.balance=50.0;System.out.println(System.out.println(赋值后访问子类的属性金额为:赋值后访问子类的属性金额为:+my200.balance);+my200.balance);if(m

21、y200.performDial()if(my200.performDial()System.out.println(System.out.println(调用子类方法后剩余金额为:调用子类方法后剩余金额为:+my200.balance);+my200.balance);System.out.println(System.out.println(直接访问子类的属性密码为:直接访问子类的属性密码为:+my200.password);+my200.password);System.out.println(System.out.println(继承父类方法修改密码为:继承父类方法修改密码为:+my2

22、00.changePwd(222);+my200.changePwd(222);System.out.println(System.out.println(访问父类属性密码为:访问父类属性密码为:+myCard.password);+myCard.password);现在学习的是第15页,共73页classPhoneCarddoublebalance=100;longcardNumber;intpassword;doublegetBalance()/父类定义的方法父类定义的方法returnbalance+20;intchangePwd(intpwd)/父类定义的方法父类定义的方法passwor

23、d=pwd;returnpwd;classD200_CardextendsPhoneCarddoubleadditoryFee;doublebalance=60;booleanperformDial()if(balance(0.5+additoryFee)balance-=(0.5+additoryFee);returntrue;elsereturnfalse;doublegetBalance()/子类的同名方法,实现方法的覆盖子类的同名方法,实现方法的覆盖returnbalance+10;现在学习的是第16页,共73页例:例:TestOverLoad.javaTestOverLoad.jav

24、a/方法的重载:一个类中存在多个同名但参数不同的方法方法的重载:一个类中存在多个同名但参数不同的方法publicclassTestOverLoadpublicstaticvoidmain(Stringargs)D200_Cardmy200=newD200_Card(12345678,1234,50.0,200);if(my200.performDial(12345678,1234)System.out.println(拨打电话后剩余金额为:拨打电话后剩余金额为:+my200.getBalance();if(my200.performDial()System.out.println(拨打电话后剩

25、余金额为:拨打电话后剩余金额为:+my200.getBalance();abstractclassPhoneCarddoublebalance;abstractbooleanperformDial();doublegetBalance()returnbalance;现在学习的是第17页,共73页abstractclassNumber_PhoneCardextendsPhoneCardlongcardNumber;intpassword;StringconnectNumber;booleanconnected;booleanperformConnection(longcn,intpw)if(cn

26、=cardNumber&pw=password)connected=true;returntrue;elsereturnfalse;现在学习的是第18页,共73页classD200_CardextendsNumber_PhoneCarddoubleadditoryFee;D200_Card(longcn,intpw,doubleb,Stringc)cardNumber=cn;password=pw;balance=b;connectNumber=c;booleanperformDial()/方法一,不带形式参数方法一,不带形式参数if(!connected)returnfalse;if(bal

27、ance(0.5+additoryFee)balance-=(0.5+additoryFee);returntrue;elsereturnfalse;booleanperformDial(longcn,intpass)/方法二,带两个形式参数,对自身方法的重载方法二,带两个形式参数,对自身方法的重载if(performConnection(cn,pass)returnperformDial();elsereturnfalse;doublegetBalance()/子类覆盖了父类的方法子类覆盖了父类的方法if(connected)returnbalance;elsereturn-1;现在学习的是

28、第19页,共73页4.1.4 4.1.4 父类对象与子类对象的使用与转化父类对象与子类对象的使用与转化 this this 和和supersuper是用来指代父类对象和子类对象的关键字。是用来指代父类对象和子类对象的关键字。JavaJava系统默认每个类都缺省地具有系统默认每个类都缺省地具有nullnull、thisthis和和supersuper三个量,三个量,nullnull代表代表“空空”。(1 1)thisthis this this表示的是当前对象本身,代表当前对象的一个引用:表示的是当前对象本身,代表当前对象的一个引用:doublegetBalance()returnthis.ba

29、lance;现在学习的是第20页,共73页null的含义的含义(不同于不同于0,空字符串空字符串)例例:(1)Strings=null;/若去掉若去掉=null呢?呢?System.out.println(s=+s);s=newString();if(s.equals()System.out.println(s是空字符串是空字符串!);(2)classstudentStringsno,sname;students=null;/System.out.println(s.sno);/空指针异常空指针异常/java.lang.NullPointerExceptions=newstudent();Sy

30、stem.out.println(s.sno=+s.sno);/s.sno=null现在学习的是第21页,共73页(2 2)supersuper 代表当前对象的直接父类对象,是当前对代表当前对象的直接父类对象,是当前对象的直接父类对象的引用。象的直接父类对象的引用。class superClassclass superClass double balance=50;double balance=50;class subClass extends superClassclass subClass extends superClass double balance=60;double balanc

31、e=60;double getBalance()double getBalance()return balance;return balance;double getSuperBalance()double getSuperBalance()return return super.super.balance;balance;public class testSuperSub public static void main(String args)subClass sb=new subClass();System.out.println(sb.getBalance();System.out.pr

32、intln (sb.getSuperBalance();现在学习的是第22页,共73页(3 3)父类对象与子类对象的转换原则)父类对象与子类对象的转换原则1 1)子类对象可以被视为是父类的一个对象;)子类对象可以被视为是父类的一个对象;2 2)父类对象不能被当作其某一个子类的对象;)父类对象不能被当作其某一个子类的对象;3 3)如果一个方法的形式参数定义的是父类对象,则调用这个)如果一个方法的形式参数定义的是父类对象,则调用这个方法时,可以使用子类对象作为实际参数;方法时,可以使用子类对象作为实际参数;记住一句话记住一句话:凡是父类能够出现的地方凡是父类能够出现的地方,子类都可以出现子类都可以

33、出现!现在学习的是第23页,共73页classSuperClass/定义父类定义父类publicvoidmethod1()classSubClassextendsSuperClass/定义子类定义子类publicvoidmethod1()publicvoidmethod2()publicclassUseSuperSub/定义主类定义主类publicstaticvoidmain(Stringargs)SuperClasssc=newSubClass();sc.method1();/调用子类的调用子类的method1()方法方法/sc.method2();/为什么是错的呢为什么是错的呢?若将以上的

34、若将以上的SuperClass改为改为SubClass,则以下语句则以下语句:sc.method1();sc.method2();是否合法是否合法?(答案是肯定的答案是肯定的!)现在学习的是第24页,共73页设设SuperClass是父类,是父类,SubClass是子类。是子类。method1定义如下:定义如下:method1(SuperClasssc)/方法的定义方法的定义.设设sb是是SubClass的对象的对象,则以下方法调用语句是合法的,则以下方法调用语句是合法的:method1(sb);现在学习的是第25页,共73页课堂练习、提问课堂练习、提问教材第四章的课后习题教材第四章的课后习题

35、:P100-102提问提问+教师点评!教师点评!现在学习的是第26页,共73页4.2 4.2 构造函数的继承与重载构造函数的继承与重载4.2.1 4.2.1 构造函数的重载构造函数的重载 指同一个类中存在着若干个具有不同参数列表的构造函数。指同一个类中存在着若干个具有不同参数列表的构造函数。出现重载情况时,创建该类对象的语句会自动出现重载情况时,创建该类对象的语句会自动根据给出的实际参根据给出的实际参数的数目、类型和顺序来确定调用哪个构造函数来完成新对象数的数目、类型和顺序来确定调用哪个构造函数来完成新对象的初始化工作的初始化工作。一个类的若干构造函数之间可以一个类的若干构造函数之间可以通过关

36、键字通过关键字thisthis来互相调用来互相调用,目的是最大限度地利用已有程序,提高程序的抽象、封装程度,减目的是最大限度地利用已有程序,提高程序的抽象、封装程度,减少程序维护工作量。少程序维护工作量。注意:注意:thisthis语句必须是整个构造函数的第一个可执行语句。语句必须是整个构造函数的第一个可执行语句。现在学习的是第27页,共73页4.2.2 4.2.2 构造函数的继承构造函数的继承指子类可以继承父类的构造函数。指子类可以继承父类的构造函数。构造函数继承应遵循的原则构造函数继承应遵循的原则*:1 1)子类)子类无条件地继续无条件地继续父类的不含参数的构造函数;父类的不含参数的构造函

37、数;2 2)如果子类自己没有构造函数,则将继承父类的无参构造函数作)如果子类自己没有构造函数,则将继承父类的无参构造函数作为自己的构造函数;为自己的构造函数;如果子类自己定义了构造函数,则在创建如果子类自己定义了构造函数,则在创建新对象时,先执行从父类继承来的无参构造函数,然后再执行新对象时,先执行从父类继承来的无参构造函数,然后再执行自己的构造函数自己的构造函数;3 3)对于父类的含参构造函数,子类可以通过在自己构造函数中)对于父类的含参构造函数,子类可以通过在自己构造函数中使使用用supersuper关键字关键字来调用它,但这个调用语句必须是子类构造函数的来调用它,但这个调用语句必须是子类

38、构造函数的第第一个可执行语句一个可执行语句。现在学习的是第28页,共73页构造函数继承示例构造函数继承示例:classpersonperson()System.out.println(“我是一个人我是一个人!”);classstudentextendspersonStringsno,sname,ssex;student()System.out.println(“我是一个学生我是一个学生”);student(Stringsno)this();this.sno=sno;System.out.println(“学号是学号是:”+sno);student(Stringsno,Stringsname)t

39、his(sno);this.sname=sname;System.out.println(“姓名是姓名是:”+sname);student(Stringsno,Stringsname,Stringssex)this(sno,sname);this.ssex=ssex;System.out.println(“性别性别:”+ssex);现在学习的是第29页,共73页publicclasstestpublicstaticvoidmain(Stringargs)studentzhang=newstudent(“1001”,”张三张三”,”男男”);分析分析:以上程序的运行结果是什么以上程序的运行结果是

40、什么?注意注意:是先调用父类是先调用父类personperson类的无参构造函数类的无参构造函数.现在学习的是第30页,共73页例:例:ConstructorOverLoad.java/构造函数的继承和重载构造函数的继承和重载publicclassConstructorOverLoadpublicstaticvoidmain(Stringargs)D200_Cardmy200=newD200_Card(12345678,1234,50.0,200,0.1);System.out.println(my200.toString();abstractclassPhoneCarddoublebalan

41、ce;abstractbooleanperformDial();doublegetBalance()returnbalance;现在学习的是第31页,共73页abstractclassNumber_PhoneCardextendsPhoneCardlongcardNumber;intpassword;StringconnectNumber;booleanconnected;Number_PhoneCard()/构造函数构造函数1:无参:无参Number_PhoneCard(longcn)/构造函数构造函数2:带:带1个参数个参数this();/重载构造函数重载构造函数1cardNumber=c

42、n;Number_PhoneCard(longcn,intpw)/构造函数构造函数3:带:带2个参数个参数this(cn);/重载构造函数重载构造函数2password=pw;Number_PhoneCard(longcn,intpw,doubleb)/构造函数构造函数4:带:带3个参数个参数this(cn,pw);/重载构造函数重载构造函数3balance=b;Number_PhoneCard(longcn,intpw,doubleb,Stringc)/构造函数构造函数5:带:带4个参数个参数this(cn,pw,b);/重载构造函数重载构造函数4connectNumber=c;现在学习的是

43、第32页,共73页booleanperformConnection(longcn,intpw)if(cn=cardNumber&pw=password)connected=true;returntrue;elsereturnfalse;classD200_CardextendsNumber_PhoneCarddoubleadditoryFee;D200_Card(longcn,intpw,doublea)/子类的构造函数子类的构造函数1,带,带3个参数个参数super(cn,pw);/继承父类的构造函数继承父类的构造函数3additoryFee=a;D200_Card(longcn,intpw

44、,doubleb,doublea)/子类的构造函数子类的构造函数2,带,带4个参数个参数super(cn,pw,b);/继承父类的构造函数继承父类的构造函数4additoryFee=a;D200_Card(longcn,intpw,doubleb,Stringc,doublea)/子类的构造函数子类的构造函数3,带,带5个参数个参数super(cn,pw,b,c);/继承父类的构造函数继承父类的构造函数5additoryFee=a;现在学习的是第33页,共73页booleanperformDial()if(!connected)returnfalse;if(balance(0.5+addito

45、ryFee)balance-=(0.5+additoryFee);returntrue;elsereturnfalse;booleanperformDial(longcn,intpass)if(performConnection(cn,pass)returnperformDial();elsereturnfalse;doublegetBalance()if(connected)returnbalance;elsereturn-1;publicStringtoString()return(电话卡接入号码:电话卡接入号码:+connectNumber+n电话卡卡号:电话卡卡号:+cardNumbe

46、r+n电话卡密码:电话卡密码:+password+n卡中的金额:卡中的金额:+balance+n通话附加费:通话附加费:+additoryFee);现在学习的是第34页,共73页4.3Java包(包(package)4.3.1 4.3.1 定义包的目的定义包的目的 把各种类组织在一起,使得程序功能清楚、结构分明,有利于实现不把各种类组织在一起,使得程序功能清楚、结构分明,有利于实现不同程序间类的复用。在同程序间类的复用。在JAVAJAVA中中,包以目录形式存在。包以目录形式存在。4.3.2 4.3.2 创建包创建包 缺省情况下,系统创建一个无名包,无名包中的类不能被其缺省情况下,系统创建一个无

47、名包,无名包中的类不能被其他包中的类引用和复用,为此需要创建有名字的包。他包中的类引用和复用,为此需要创建有名字的包。语法:语法:packagepackage 包名包名;/必须是整个必须是整个javajava文件的第一个语句文件的第一个语句如:如:packagepackage PhoneCard PhoneCard;/在当前文件夹下创建文件夹在当前文件夹下创建文件夹PhoneCardPhoneCard packagepackage PhoneCard.PhoneCard200 PhoneCard.PhoneCard200/在当前文件夹下创建文件夹在当前文件夹下创建文件夹 PhoneCard P

48、honeCard,PhoneCardPhoneCard文件夹下创建文件夹文件夹下创建文件夹PhoneCard200PhoneCard200现在学习的是第35页,共73页/创建包示例创建包示例X1.javapackagemyPackage;publicclassX1intx,y;publicX1(inti,intj)this.x=i;this.y=j;System.out.println(x=+x+y=+y);publicvoidshow()System.out.println(thisclassisaX1!);现在学习的是第36页,共73页/创建包示例创建包示例X2.javapackagemy

49、Package;publicclassX2intm,n;publicX2(inti,intj)this.m=i;this.n=j;System.out.println(m=+m+n=+n);publicvoidshow()System.out.println(thisclassisaX2!);现在学习的是第37页,共73页/包的引用示例包的引用示例Pack.javaimportmyPackage.X1;importmyPackage.X2;publicclassPackpublicstaticvoidmain(Stringargs)X1aa=newX1(4,5);aa.show();X2bb=

50、newX2(10,20);bb.show();现在学习的是第38页,共73页4.3.3包的引用包的引用同一个包中的类可以相互访问,但若要访问同一个包中的类可以相互访问,但若要访问其他包中的其他包中的public类类(其它其它包中的非包中的非public类无法访问类无法访问!),可使用下列方法:,可使用下列方法:(1)使用包名、类名前缀使用包名、类名前缀要使用其他包中的类,需要在类名前加上包名作为前缀。要使用其他包中的类,需要在类名前加上包名作为前缀。例:例:publicclasstestPackage/采用包名采用包名.类名的方法来引用其它包中的类类名的方法来引用其它包中的类publicsta

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

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁