第章Java语言面向对象高级程序设计.ppt
《第章Java语言面向对象高级程序设计.ppt》由会员分享,可在线阅读,更多相关《第章Java语言面向对象高级程序设计.ppt(152页珍藏版)》请在三一办公上搜索。
1、2023年6月22日星期四,第04章 Java语言面向对象高级程序设计,2023年6月22日星期四,【目的要求】,1掌握面向对象高级程序设计:主要包括消息通信、访问控制、封装、继承、多态性、抽象类、抽象方法、接口、内部类、匿名类等。2掌握Java修饰符:this、super、final、abstract、static等。3了解Java设计模式:模式的概念,模式的种类,Decorator、Faade、FactoryMethod和Proxy等设计模式,设计模式在接口中的应用。,2023年6月22日星期四,【重点难点】,教学重点访问控制、继承、多态性、抽象类、抽象方法、接口。教学难点 内部类、匿名类
2、。教学课时理论4学时+课内上机2学时+课外上机2学时教学方法采用多媒体课件+启发式+任务驱动法相结合教学作 业P195:一T(不抄题);二T13,4,5,7,9;三,四,五,六T(不抄题);七T 1,2,3,5,6.,2023年6月22日星期四,第04章 Java语言面向对象高级程序设计,4.5.2 抽象方法 4.6 接口4.6.1 接口的概念4.6.2 接口的定义4.6.3 接口的实现4.6.4 接口与抽象类的比较4.7 内部类与匿名类4.7.1 内部类4.7.2 匿名类4.8 this、Super和修饰符4.8.1 this引用4.8.2 super关键字4.8.3 Java的修饰符4.9
3、 Java的设计模式4.9.1 模式的概念4.9.2 创建模式4.9.3 结构模式4.9.4 行为模式4.9.5 设计模式在接口中的应用习题四实验四 Java面向对象高级程序设计,4.1 消息通信(Communication With Messages)4.1.1 消息的类型4.1.2 消息的使用4.2 访问控制4.2.1 类的访问控制4.2.2 类成员的访问控制4.3 继承4.3.1 创建子类4.3.2 继承的传递性4.3.3 子类对象的初始化4.3.4 子类继承父类的规则4.3.5 上转型与下转型对象4.3.6 继承的使用方法4.3.7 继承与组合区别4.4 多态性4.4.1 多态性的概念
4、4.4.2 方法重载4.4.3 方法覆盖4.4.4 变量覆盖4.5 抽象类与抽象方法4.5.1 抽象类,2023年6月22日星期四,4.1 消息通信(Communication With Messages),4.1.1 消息的类型1公有消息与私有消息公有消息指由外界对象直接发送给某对象的消息;私有消息指对象自己发送给本身的消息,私有消息对外不开放,外界也不必了解它。外界对象只能向某对象发送公有消息,而不能发送私有消息,私有消息则由对象自身发送。,2023年6月22日星期四,4.1.1 消息的类型,2特定对象的消息特定对象的消息指将某对象可接收消息的方法集中在一起,将其消息组合而形成的一个粒度更
5、大的消息,响应此消息的方法集对用户是透明的。特定对象的消息可分为三种类型:可以返回对象内部状态的消息;可以改变对象内部状态的消息;可以做一些特定操作,改变系统状态的消息。,2023年6月22日星期四,4.1.2 消息的使用,P134【例4-1】Java中的消息通信示例。程序清单4-1:MessageDemo.java,2023年6月22日星期四,4.2 访问控制,Java中的访问控制(Access Control)主要包括对包、类、接口、类成员和构造方法的访问控制等方面。除了包的访问控制由主机系统决定外,其他的访问控制通过访问控制符来实现。访问控制符是一组限定类、接口、类成员(成员变量和成员方
6、法)是否可以被其他类访问的修饰符。类和接口的访问控制符只有public和默认(default)两种。类成员和构造方法的访问控制符有public、private、protected和默认(default)4种。,2023年6月22日星期四,4.2.1 类的访问控制,表4-1 类的访问控制符及可见性,2023年6月22日星期四,4.2.1 类的访问控制(续一),1类的公共访问控制(public)public类具有跨包访问性,以支持类的跨包访问。一个Java程序中最多有一个public类(也可以没有public类),若有则并用public类名作为整个程序的源程序文件名。定义在同一个程序文件中的所有类
7、都属于同一个包(默认包或package指定名称的包)。处于同一个包中的类都是可见的,不需任何说明便可地互相访问和引用。一般地,处于不同包中的类相互之间是不可见的,而不能互相引用。只有当某个类的访问控制符为public时,它才能被其他包中的类可见和使用。,2023年6月22日星期四,4.2.1 类的访问控制(续二),若跨包访问public类,则先在引用它的另一个包中使用import语句引入此public类,然后方能访问和引用这个类,以创建这个类的对象,并访问这个类内部可见的数据成员和引用它的可见的成员方法。要特别指出的是,尽管处于不同包中的public类作为整体对其他类是可见的,但并不代表该类的
8、所有数据成员和成员方法也同时对其他类是可见的,因为这些数据成员和成员方法还进一步受到类成员修饰符访问控制。只有当public类的数据成员和成员方法的访问控制符也被声明为public时,这个类的所有用public修饰的数据成员和成员方法也同时对其他类是可见的。P136【例4-2】不同包中的public类能被跨包访问,而不同包中的default类不能被跨包访问。程序清单4-2:E4_2A.java、E4_2Demo.java,2023年6月22日星期四,2类的默认访问控制(default),类的默认访问控制是指类没有访问控制符,它只具有包访问性,即只有在同一个包中的类和对象才能访问和引用默认访问控
9、制的类,而不支持类的跨包访问。示例:类的默认访问控制示例如例4-2中的E4_2B类所示,由于p1包中的E4_2B类为default类,而只具有包访问性,因此它只能被其所在的p1包中的类(如E4_2A类)访问引用,而不能被尽管已引入到p1包中的p2包中类(如E4_2Demo类和E4_2C)访问引用。,2023年6月22日星期四,4.2.2 类成员的访问控制,类成员不仅包括在类体中声明的成员变量和成员方法,而且包括从它的直接父类继承的成员和从任何直接接口继承的成员。,表4-2 类成员的访问控制符及可见性,2023年6月22日星期四,1类成员的公共访问控制(public),public类型的类成员可
10、被同一类、同一包中子类与非子类和不同包中的子类与非子类的代码访问引用。或者说public类成员可被能够访问它所在的包的任何代码所访问,它不受类域访问性、包域访问性和跨包域访问性的任何限制。,2023年6月22日星期四,1类成员的公共访问控制(public)(续一),P138【例4-3】对于不同包中和相同包中非子类的public类成员可任意访问。先在pubpac1包中的public类E4_3A中定义public类型的成员变量和成员方法,然后在pubpac2包中引入pubpac1包中的类后,由default类E4_3B中构造方法创建E4_3A类的实例,并访问其中的public成员,实现对publi
11、c类成员的跨包访问,最后在主类publicDemo中创建E4_3B类的实例后,实现对同包类的public类成员的访问。程序清单4-3:E4_3A.java、publicDemo.java,2023年6月22日星期四,2类成员的保护访问控制(protected),protected类型的类成员可被同一类、同一包中子类与非子类和不同包中的子类的代码访问。或者说protected类成员可被除不同包的非子类以外的其他能够访问它所在包的任何代码所访问,它不受类域访问性、包域访问性的任何限制。P139【例4-4】允许包域访问protected类成员,而不能跨包访问不同包中非子类的protected类成员变
12、量与成员方法。程序清单4-4:E4_4A.java、ProtectedDemo.java,2023年6月22日星期四,2类成员的保护访问控制(protected)(续一),P140【例4-4】分析:先在propac1包中的public类E4_4A中定义protected类型的成员变量和成员方法;然后在propac2包中引入propac1包中的类后,由default类E4_4B中构造方法创建E4_4A类的实例,并试图跨包访问其中的protected成员而不成最后在主类ProtectedDemo中创建E4_4B类的实例后,实现了对同包类的projected成员的访问。,2023年6月22日星期四,
13、3类成员的默认访问控制(default),default类型(没有访问控制符)的类成员只能被同一类、同一包中子类与非子类的代码访问。它具有类域访问性和包域访问性。P140【例4-5】default类型的类成员,只具有类域和包域访问性,而不能跨包域访问。程序清单4-5:E4_5A.java、DefaultDemo.java,2023年6月22日星期四,P141【例4-5】分析:先在defpac1包中的public类E4_5A中定义default类型的成员变量和成员方法;然后在defpac2包中引入defpac1包中的类后,由default类E4_5B中构造方法创建E4_5A类的实例,并试图跨包访
14、问其中的default成员而不成;最后在主类DefaultDemo中创建E4_5B类的实例后,实现了对同包类的default成员的访问。,2023年6月22日星期四,4类成员的私有访问控制(private),private类型的类成员只能被其所在类中的代码访问,它只具有类域访问性。P141【例4-6】private类型的类成员,只具有类域访问性,而不具备包域和跨包域访问性。程序清单4-6:E4_6A.java、PrivateDemo.java 说明:对于同一包中和不同包中子类的public、protected、default和privae成员的访问控制,请见4.3.34.3.4节相关内容。,2
15、023年6月22日星期四,4.3 继承,继承(Inheritance)是两个类之间的一种泛化关系(一般-特殊关系),是一种由已有的类创建新类的机制。利用继承,可以先创建一个拥有共同属性的一般类,根据该一般类再创建具有特殊属性的新类。由继承而得到的类称为子类(Subclass),被直接或间接继承的类称为父类(Father Class),或叫超类(Superclass)或基类(Base Class)。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为。Java仅支持单继承,而不支持多重继承,即每个子类只允许有一个父类,而不允许有多个父类。但是可以从一个父类中生
16、成若干个子类。继承不改变成员的访问权限,父类中的公有成员、保护成员和默认成员,在子类中仍然是公有成员、保护成员和默认成员。Java中的多继承将通过接口方式来实现。,2023年6月22日星期四,4.3.1 创建子类,在类的声明中加入extends子句来创建一个类的子类:class extends父类名/只允许一个直接父类 子类中的新增成员/子类体说明:关键字class用来定义类,关键字extends用来指出该类的直接父类,若没有extends子句,则表示该类的默认父类为java.lang.Object类。若“父类”又是某个类的子类,则“子类”同时也是该类的(间接)子类。“子类”可以继承“父类”中
17、访问权限设定为public、protected和default的成员变量和成员方法,但是不能继承访问权限为private的成员变量和成员方法。例如:,2023年6月22日星期四,4.3.1 创建子类(续一),class A/类A继承类java.lang.Objectint a1=10;private int a2=20;public int getA2()return a2;class B extends A/类B继承类A,间接继承类/java.lang.Object/类B继承父类A的非私有成员:a1和getA2(),而私有成员a2不能被继承int b1=100;private int b2=
18、200;public int getB2()return b2;,2023年6月22日星期四,4.3.2 继承的传递性,类的继承是可以传递的。类继承的传递性是指若类B继承类A,类C又继承类B,则类C应包含类A和类B的非私有成员,以及类C自身的成员。P143【例4-7】类继承的传递性。程序清单4-7:InheritanceTransferDemo.java,2023年6月22日星期四,4.3.3 子类对象的初始化,由于子类中包含有父类的非私有成员。在创建子类对象时,不仅要对自身成员变量初始化,而且还要对继承的父类中成员变量初始化。对象的初始化是通过调用构造方法来实现的。构造方法不能被继承,但可以
19、在子类的构造方法中调用父类的构造方法。为了方便使用,系统规定用this()表示当前类的构造方法,用super()表示直接父类的构造方法。除Object类没有父类外,其他类的构造方法中应包含自身类的构造方法和直接父类的构造方法。,返回,2023年6月22日星期四,构造方法的特性,自动提供默认构造方法:若一个类中没有定义任何构造方法时,则系统自动提供一个没有参数的默认构造方法;若类中已定义任何构造方法,则系统将不提供默认构造方法。允许构造方法重载:一个类中可根据需要定义多个重载的构造方法,不同构造方法的选择是根据参数的个数、类型和顺序进行匹配。支持this()和super():在构造方法定义中,可
20、使用this()来调用本类的其他构造方法,使用super()来调用父类的构造方法。若this和super都不用时,系统会自动调用super(),即父类的默认构造方法。调用this()或super()的构造方法的语句必须放在第一条语句,并且this()和super()最多只可调用其中一条。P144【例4-8】子类对象的初始化,掌握this()和super()的使用.,2023年6月22日星期四,4.3.4 子类继承父类的规则,由于子类受到父类成员的访问控制符和包的限制,子类并不能继承父类中所有的成员变量和成员方法。,表4-3 子类继承父类的规则,注:父类的构造方法不能被子类继承,只能通过supe
21、r()来调用。父类中成员的访问权限在子类中是不变的。,2023年6月22日星期四,1父子类在同一包中的继承规则实例,若子类和父类在同一个包中,则子类继承父类中的public、protected和默认成员(成员变量和成员方法),将其作为子类的成员,但不能继承父类的private成员。P145【例4-9】同包中的子类只能继承父类中的非私有成员(public、protected和默认成员)。程序清单4-9:InheritanceRuleOfSamePackage.java,2023年6月22日星期四,2父子类在不同包中的继承规则(续一),若子类和父类不在同一个包中,则子类继承了父类中的public和
22、protected成员变量和成员方法,将其作为子类的成员,但不能继承父类的默认和private成员。P146【例4-10】不同包中的子类只能继承父类中的public和protected成员,且不同包中的非子类不能调用protected成员,只有子类才能调用protected成员。程序清单4-10:InheritanceRuleOfDifferentPackage.java、A.java,2023年6月22日星期四,4.3.5 上转型与下转型对象,1子类对象和父类对象之间的转换Java允许父类对象和子类对象在一定条件下相互之间转换。其相互转换规则是:隐式(自动)转换:子类对象直接赋值给父类对象时
23、,子类对象可自动转换为父类对象,称该父类对象是子类对象的上转型对象;强制转换:父类对象赋值给子类对象时,必须将父类对象强制转换为子类对象,称该子类对象是父类对象的下转型对象;没有继承关系的类类型,即不在继承树的同一个继承分支上,则不允许进行类型转换。,2023年6月22日星期四,2上转型对象,设类A是类B的父类,若有:A a;B b=new B();a=b;/a是b的上转型对象(子类对象可自动转型成父类对象)则称父类对象a是子类对象b的上转型对象。若有:B b;A a=new A();b=(B)a;/b是a的下转型对象(父类对象须强制转型成子类对象)则称子类对象b是父类对象a的下转型对象。,2
24、023年6月22日星期四,2上转型对象(续一),对象的上转型对象的实体由子类负责创建,上转型对象会失去原对象的一些属性和功能。上转型对象的特性是:上转型对象不能操作子类新增的成员变量和成员方法。上转型对象可以操作子类继承或重写的成员变量和成员方法。若子类重写了父类的某个方法,则上转型对象调用该方法时一定是调用被子类重写的方法。若子类隐藏了父类的某个变量,则上转型对象访问该变量时,访问的是父类中被隐藏的变量。可以将对象的上转型对象再强制转换成子类对象,则该子类对象又具备了子类所给的所有属性和功能。P148【例4-11】上转型对象的使用。程序清单4-11:UpTransferObjectType.
25、java,2023年6月22日星期四,3对象引用变量的动态绑定,引用变量是指类的对象的引用型变量,其绑定规则如下:(1)对于一个引用类型的变量,Java编译器按照它声明的类型来处理.(2)对于一个引用类型的变量,运行时Java虚拟机按照它实际引用的对象来处理。例如下转型对象的引用虽然编译可以通过,但运行时会抛出ClassCastException运行时异常。(3)在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,Java虚拟机采用以下绑定规则:实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由Java虚拟机动态决定的。静态方法与引用变量所声明的类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言 面向 对象 高级 程序设计
链接地址:https://www.31ppt.com/p-5284114.html