Java技术及应用第三讲面向对象技术.ppt
《Java技术及应用第三讲面向对象技术.ppt》由会员分享,可在线阅读,更多相关《Java技术及应用第三讲面向对象技术.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LOGO第第3章章Java面向对象初步面向对象初步广东工业大学计算机学院广东工业大学计算机学院本章学习目标本章学习目标v类类v修饰符修饰符v包包v多态多态v本章补充阅读材料本章补充阅读材料2广东工业大学计算机学院广东工业大学计算机学院面向对象整体概念图面向对象整体概念图3广东工业大学计算机学院广东工业大学计算机学院面向对象几个概念面向对象几个概念v类类:是既包括数据又包括作用于数据的一组操作的封装体。类:是既包括数据又包括作用于数据的一组操作的封装体。类中的数据称为中的数据称为成员变量成员变量,类中对数据的操作称为,类中对数据的操作称为成员方法成员方法。v对象对象:对象是类的实例。对象是动态的
2、,有自己的生存周期。:对象是类的实例。对象是动态的,有自己的生存周期。v封装封装性:为类的成员提供公有、缺省、保护和私有等多级访问性:为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。权限,目的是隐藏类中的私有变量和类中方法的实现细节。v继承性继承性:提供从已存在的类创建新类的机制,继承使一个新类:提供从已存在的类创建新类的机制,继承使一个新类自动拥有被继承类的全部成员。自动拥有被继承类的全部成员。一个类只有一个直接父类称为一个类只有一个直接父类称为单重继承单重继承,如果一个类拥有多个直接父类称为,如果一个类拥有多个直接父类称为多重继承多重继承。
3、v多态性多态性:提供类中方法执行的多样性。有两种表现形式:重载:提供类中方法执行的多样性。有两种表现形式:重载和覆盖。和覆盖。4广东工业大学计算机学院广东工业大学计算机学院3.1类类类的相关概念类是抽象数据类型的具体实现,是具有相同属性和相同操作功能的对象的集合。对象是类的实例,两者之间的关系相当于一般程序设计语言中变量和变量类型的关系。在类中,数据或变量被称为成员变量,定义在类中的方法和成员变量统称为类的成员。在大多数类中,成员变量通过定义在该类中的方法来操作和存取,方法决定该类中的数据如何使用。(封装)5广东工业大学计算机学院广东工业大学计算机学院3.1类类vJava中的类在Java程序中
4、,类是由定义和主体构成的右图是Java中一个完整的类6广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(0)从上页得知,从上页得知,Java中,类定义的基本语法如下:中,类定义的基本语法如下:作作 用用 域域 class 类类 名名 extends 父父 类类 名名 implements 接口名接口名 成员变量声明成员变量声明 成员方法声明成员方法声明 7广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(1)v类的作用域 用来说明类的特殊性质。分为以下几种:v外部类public公共类型公共类型无关键字无关键字“友好的友好的”a
5、bstract:抽象类抽象类final:非继承非继承v protected 和和 private:应用于内部类应用于内部类8广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(2)v关于类头在class关键字后面,应跟随自定义类的名称。(不要把不要把class写写成了成了Class)。父类名跟在父类名跟在extends关键字后面,用来说明当前类是哪个已存在关键字后面,用来说明当前类是哪个已存在类的子类类的子类(只能有一个直接父类,与只能有一个直接父类,与C+不同)不同),说明继承关系。接口名跟在接口名跟在implements关键字后面,用来说明当前类中实现了哪关
6、键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。个接口定义的功能和方法。接口是接口是Java语言用来实现多重继承的语言用来实现多重继承的一种特殊机制。(下一章将对接口进行详细介绍!)一种特殊机制。(下一章将对接口进行详细介绍!)9广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(0)类体的定义要包括类的具体内容,包括类的属性与方法。class 10广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(1)v类的成员变量类的成员变量语法语法:修饰符修饰符 变量类型变量类型
7、 变量名变量名 =变量初值变量初值;例:例:private String name;protected int age;11广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(2)v类的成员方法类的成员方法 类中定义的方法通常起到两种作用:一是围绕着类的属性进行各类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。种操作;二是与其他的类或对象进行数据交流、消息传递等操作。Java中声明方法的语法如下:中声明方法的语法如下:修饰符修饰符 返回值类型返回值类型 方法名方法名(参数
8、列表参数列表)throws 异常名异常名1,异常名,异常名2,局部变量声明;局部变量声明;语句序列;语句序列;/若返回值类型不为若返回值类型不为void,则需用则需用return语句返回值语句返回值12广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法类的构造方法 一般而言,类的成员方法都是在类的实例对象创建之一般而言,类的成员方法都是在类的实例对象创建之后,才用该对象调用相应的方法。而构造方法能够在创建后,才用该对象调用相应的方法。而构造方法能够在创建对象的同时执行该方法。对象的同时执行该方法。Java允许对象在它
9、们被创建时初始化自己。这种自动允许对象在它们被创建时初始化自己。这种自动的初始化是通过使用构造方法(的初始化是通过使用构造方法(constructor)来完成)来完成的。的。构造方法的任务就是初始化一个对象的内部状态。构造方法的任务就是初始化一个对象的内部状态。13广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法类的构造方法修饰符修饰符 类名称类名称(类型类型1 参数参数1,类型,类型2 参数参数2,)程序语句程序语句;./构造方法没有返回值。构造方法没有返回值。说明:说明:1.修饰符可以是修饰符可以是public
10、或或private.2.构造方法的名字必须与类名相同。构造方法的名字必须与类名相同。3.构造方法没有返回值类型。构造方法没有返回值类型。4.构造方法构造方法不能由编程人员显式地直接调用不能由编程人员显式地直接调用,它是,它是在对象创建时由在对象创建时由new运算符自动调用的运算符自动调用的。5.构造方法构造方法可以重载可以重载,即一个类可以有多个具有不同参数列表的构造,即一个类可以有多个具有不同参数列表的构造方法。方法。14广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法实例类的构造方法实例1class Emplo
11、yee public Employee(String n,double s,int y,int m,int d)/构造方法构造方法 name=n;/职工姓名职工姓名 salary=s;/职工工资职工工资 GregorianCalendar calendar=new GregorianCalendar(y,m-1,d);hireDay=calendar.getTime();/工作日期工作日期 private String name;private double salary;private Date hireDay;Employee e=new Employee(“James Bond”,100
12、000,1950,1,1)15广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法实例类的构造方法实例2构造方法的重载构造方法的重载class CCircle ;public CCircle()/没有参数的构造方法没有参数的构造方法 public CCircle(String str,double r)/有两个参数的构造方有两个参数的构造方法法 16广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的默认构造方法类的默认构造方法v每个类都至少有一个构造
13、方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法。默认构造方法的名字与类名相同,它的参数列表和方法体均为空,自动将所有实例变量初始化为默认值(数值型为0,布尔型为false,字符型为u0000,对象型为null)。v 一旦定义了自己的构造方法,默认构造方法将不再起作用。17广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)v类的析构方法类的析构方法用于释放类的实例并执行特定操作。用于释放类的实例并执行特定操作。Java语言的资源回收机制能够自动释放不再被使用的对象,因此,语言的资源回收机制能够自动释放不
14、再被使用的对象,因此,自定义一般不需要设计析构方法。自定义一般不需要设计析构方法。如果需要主动释放对象,或在释放对象时执行特定操作,则类中如果需要主动释放对象,或在释放对象时执行特定操作,则类中可以定义析构方法。可以定义析构方法。publicvoidfinalize()/析构方法,一个类中只能有一个析构方法,一个类中只能有一个语句序列语句序列;18广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(5)vthis 保留字保留字this是对类对象自身的引用。它是一个泛指,与上下文环境有是对类对象自身的引用。它是一个泛指,与上下文环境有关。
15、例如:关。例如:this.edgeLength=Length;class ThisClass public static void main()Bank bank=new Bank();bank.someMethod(this);/指代对象本身指代对象本身class Circle int r;Circle(int r)this.r=r;public area()return r*r*3;/访问本类的成员方法、成员访问本类的成员方法、成员变量(区分局部变量)变量(区分局部变量)19广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)v
16、thisv通过通过this()可以从某个构造函数调用另一个构造函数。例:可以从某个构造函数调用另一个构造函数。例:class CCircle.public CCircle()this(Green,1.0);/此行会调用下面的构造函数此行会调用下面的构造函数public CCircle(String str,double r);完整程序完整程序20广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)vinstanceof对象符对象符对象运算符对象运算符instanceof判断一个对象是否属于指定类及其子类,判断一个对象是否属于指定类及
17、其子类,返回返回boolean类型。类型。Date2aday=newDate2(2006,5,1);adayinstanceofDate2/返回返回true,aday是是Date2类对象类对象21广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(5)vextends在定义类时,使用在定义类时,使用extends来说明与父类的继承关系。来说明与父类的继承关系。Java中的类都是中的类都是Object的子类的子类 22广东工业大学计算机学院广东工业大学计算机学院3.1类类v关于类体(关于类体(5)vextends类的赋值相容性:继承性具有
18、类的赋值相容性:继承性具有“即是即是”性质:子类对象即是父类性质:子类对象即是父类对象。反之则不然对象。反之则不然。例:例:Personp1=Student1s1=(Student1是是Person的子类的子类)p1instanceofPerson1/返回返回true,p1是是Person1类对象类对象s1instanceofPerson1/返回返回true,子类对象即是父类对象子类对象即是父类对象p1instanceofStudent1/返回返回false继承性的继承性的“即是即是”性质表现为父类与子类之间具有赋值相容性,性质表现为父类与子类之间具有赋值相容性,即父类对象能否被转换为子类对象
19、,反之则不然。即父类对象能否被转换为子类对象,反之则不然。例:例:Person1p1=newStudent1();/赋值相容赋值相容Student1s1=newPerson1();/赋值不相容赋值不相容23广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(3)v关于类体(5)vsupervsuper指这个对象的父类,可用来引用父类中的指这个对象的父类,可用来引用父类中的方法(包括构造方法)及变量数据方法(包括构造方法)及变量数据.特别是用于调特别是用于调用被父类所覆盖的实例方法和属性!用被父类所覆盖的实例方法和属性!24广东工业大学计算机学院广东工业大学计算机学院3.1类类
20、v实例实例1:父类实例的:父类实例的super引用引用(访问被覆盖的方法)访问被覆盖的方法)public class Ostrich extends Brid /子类中原有的内容 /增加一个callOverridedMethod()方法 public void callOverridedMethod()/在子类方法中通过super显式调用父类被覆盖的实例方法 super.fly();public static void main(String args)/创建Ostrich对象 Ostrich os=new Ostrich();/执行Ostrich对象的fly方法,将输出“我只能在地上奔跑”o
21、s.fly();os.callOverridedMethod();/借助该方法调用被覆盖的fly方法,输出”我在飞“!备注:this和super都不能出现在static修饰的方法中。25广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例实例2:用:用super访问被覆盖的变量访问被覆盖的变量class BaseClass public int a=5;class SubClass extends BaseClass public int a=7;public void accessOwner()System.out.println(a);/访问覆盖属性a,输出7public void
22、 accessBase()/super是对该方法调用者对应的父类对象的引用 System.out.println(super.a);/访问父类被覆盖的属性a,输出5.public static void main(String args)26广东工业大学计算机学院广东工业大学计算机学院3.1类类实例3:利用super调用父类的构造方法public class apple extends fruits public apple(int price)super(price);/other code v 以上句子表示使用父类的构造函数生成实例v super必须是子类构造器的第一条语句(构造方必须是子
23、类构造器的第一条语句(构造方法中才是如此)法中才是如此)27广东工业大学计算机学院广东工业大学计算机学院3.1类类关于子类构造方法调用父类构造方法的补充说明。(分三种情况)v子类构造方法第一行用super显式调用父类构造方法,系统将根据super调用里传入的实参列表调用父类相应的构造方法。v子类构造方法第一行使用this显示调用本类中重载的构造方法,系统将根据this调用里传入的实参列表调用本类另一个构造方法。执行本类另一个构造方法时会调用父类的构造方法。v子类构造方法super、this调用,系统将会在执行子类构造方法之前,隐式调用父类无参数的构造方法。也就是说:不管哪种情况,子类构造方法总
24、会调用父类构造也就是说:不管哪种情况,子类构造方法总会调用父类构造方法一次。不仅如此,执行父类构造方法时,系统会再次上溯方法一次。不仅如此,执行父类构造方法时,系统会再次上溯执行其父类的构造方法执行其父类的构造方法,以此类推,创建任何,以此类推,创建任何Java对象,对象,最先执行的总是类的构造方法。最先执行的总是类的构造方法。28广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例:演示构造方法之间的调用关系实例:演示构造方法之间的调用关系 class Creature public Creature()System.out.println(“Creatrue无参构造方法无参构造方法
25、”);class Animal extends Creature public Animal(String name)System.out.println(“Animal带一个参数的构造方法带一个参数的构造方法,该动该动 物的物的name为为”+name);public Animal(String name,int age)this(name);System.out.println(“Animal带两个参数的构造函数,其带两个参数的构造函数,其age为为”+age);29广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例:演示构造方法之间的调用关系(续)实例:演示构造方法之间的调用关
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 技术 应用 第三 面向 对象
限制150内