第3章 JAVA面向对象编程.ppt
《第3章 JAVA面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第3章 JAVA面向对象编程.ppt(257页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象的程序设计第第3章章 JAVA面向对象编程面向对象编程面向对象的程序设计面向对象的程序设计面向对象的程序设计类与对象类与对象构造方法构造方法方法重载方法重载static关键字关键字this关键字关键字instanceof关键字关键字类的继承与多态类的继承与多态继承继承成员访问成员访问super何时调用构造方法何时调用构造方法本章内容本章内容:初始化顺序初始化顺序父类的静态方法父类的静态方法java.lang.Object类类final多态多态抽象类、接口与内部类抽象类、接口与内部类抽象类抽象类接口接口用接口实现多重继承用接口实现多重继承向上及向下转型向上及向下转型内部类内部类嵌套类和匿
2、名类嵌套类和匿名类面向对象的程序设计面向对象的程序设计面向对象的程序设计1、封装2、继承3、多态面向对象的程序设计类声明由四部分组成:类修饰符、类关键字class、声明父类、实现接口,其一般形式如下:publicabstract|final class 类名类名 extends 父类名父类名 implements 接口列表接口列表 3.1 类与对象类与对象面向对象的程序设计(1)类修饰符public:这个public关键字声明了类可以在其他类中使用。缺省时,该类只能被同一个包中的其他类使用。abstract:声明这个类为抽象类,即这个类不能被实例化。final:声明该类不能被继承,即不能有子类
3、。也就是说,不能用它通过扩展的办法来创建新类。面向对象的程序设计(2)类的关键字class在类声明中,class是声明类的关键字,表示类声明的开始,类声明后面跟着类名,按习惯类名要用大写字母开头,并且类名不能用阿拉伯数字开头。给类名命名时,最好取一个容易识别且有意义的名字,避免A、B、C之类的类名。面向对象的程序设计类成员的四种访问权限:1、公有public2、受保护protected3、默认4、私有private面向对象的程序设计类的访问权限:只有如下两种:公有public及默认,除此之外,没有其它的修饰符。面向对象的程序设计构造方法构造方法特点如下:特点如下:1、无返回值、无返回值2、方法
4、名与类名相同、方法名与类名相同3、访问权限不能为私有、访问权限不能为私有4、可重载、可重载5、调用时,根据参数自动选择相应的构、调用时,根据参数自动选择相应的构造方法。造方法。面向对象的程序设计创建对象与定义构造函数 1.创建对象定义类的最终目的是使用对象。面向对象的程序设计创建对象的一般格式:类名 新建对象名 new 构造函数();创建对象与声明基本数据类型的变量类似,首先说明新建对象所属的类名,然后说明新建对象的名字,new是为新建对象开辟内存空间的运算符。像声明变量需要为变量开辟内存空间保存数据一样,创建对象也需要为对象开辟内存空间保存域和方法。与变量相比,对象占用的内存空间要大得多,对
5、象是以类为模板创建的具体实例。面向对象的程序设计2.构造函数构造函数(构造方法构造方法)创建对象与声明变量的不同点:创建对象的同时将调用这个对象的构造函数完成对象的初始化。声明变量时可以用赋值语句为它赋初值,而一个对象可能包括若干个域,需要若干个赋值语句,把若干个赋初值的语句组合成一个方法在创建对象时一次性同时执行,这个方法就是构造函数。构构造造函函数数是是与与类类同同名名的的方方法法,创建对象的语句用 new运算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。面向对象的程序设计构造函数是类的特殊方法,主要体现在以下的几个方面:(1)构造函数的方法名与类名相同。(2)没有返回
6、类型。(3)作用:完成对类对象的初始化工作。(4)一般不能由编程人员显式直接调用。(5)在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。面向对象的程序设计import java.io.*;public class StuInfo public static void main(String args)Student st1=new Student();/st1.setName(卫洪春);st1.setStuNum(2010090423);System.out.println(st1.toString();class Student/属性String name;int S
7、tuNum;String course;int grade;/方法Student()name=无名;StuNum=-8;int i=0;course=new String3;grade=new int3;course0=语文;course1=数学;course2=英语;for(i=0;i 3;i+)gradei=0;public int getGrade(String str)if(str.equals(course0)return grade0;else if(str.equals(course1)return grade1;else if(str.equals(course2)return
8、 grade2;else System.out.println(没有课程!);return-1;public String getName()return name;public int getStuNum()return StuNum;public void setGrade(int grd,String str)if(str.equals(course0)grade0=grd;else if(str.equals(course1)grade1=grd;else if(str.equals(course2)grade2=grd;else System.out.println(没有课程!);p
9、ublic void setName(String name)this.name=name;public void setStuNum(int stuNum)StuNum=stuNum;public String toString()String temp_String=;temp_String+=姓名:;temp_String+=this.name;temp_String+=n学号:;temp_String+=this.StuNum;temp_String+=nn各科成绩如下:;return temp_String;面向对象的程序设计import java.io.*;public class
10、 testMyJava public static void main(String args)Person p=new Person(35,true);System.out.println(p.showInfo();class Personpublic int ageI;public boolean genderB;public Person(int age,boolean gender)this.ageI=age;this.genderB=gender;public int getAgeI()return ageI;public boolean isGenderB()return gend
11、erB;public void setAgeI(int ageI)this.ageI=ageI;public void setGenderB(boolean genderB)this.genderB=genderB;String showInfo()String tempString=;tempString+=ageI;tempString+=岁 ;if(this.genderB=true)tempString+=男;else tempString+=女;return tempString;面向对象的程序设计基本类型基本类型默认值默认值booleanfalsecharnullbyte(byte
12、)0short(short)0int 0long0lfloat0.0fdouble0.0dJava类的某个成员为基本数据类型时,或没有初始化,则它们的默认值如右表:注意注意:只有当变量作为一个类的成员使用时,java才确保给定其默认值,但一般还是显示给出其默认值较好。面向对象的程序设计类的修饰符类的修饰符Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。两种类的修饰符:访问控制符和非访问控制符。有些类的修饰符也可以用来修饰类中的域或方法,非访问控制有:abstract、final面向对象的程序设计抽象类抽象类(abst
13、ract)抽象类:用abstract修饰符修饰的类。抽象类是没有具体对象的概念类。抽象类是它的所有子类的公共属性的集合。使用抽象类的优点是可充分利用这些公共属性来提高开发和维护程序的效率。面向对象的程序设计最终类(最终类(final)如果一个类被final修饰符所修饰和限定,则该类不能有子类。被定义为final的类通常是有固定作用、用来完成某种标准功能的类。如Java系统定义的、用来实现网络功能的InetAddress、Socket等类都是final类。面向对象的程序设计在Java程序中,当通过类名引用一个类或其对象时,实际真正引用的既可能是这个类或其对象本身,也可能是这个类的某个子类及子类的
14、对象,具有一定的不确定性具有一定的不确定性。将一个类定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能的正确无误。面向对象的程序设计注意:abstract和final不能同时修饰一个类。因为abstract类自身没有具体对象,需要派生出子类后再创建子类的对象;而final类不可能有子类,这样abstract final类就就没有意义。但abstract和final可以分别与其他修饰符合用。例如一个类可以是public abstract的,或者是public final的。public是访问控制符,当一个以上的修饰符修饰类或类中的
15、域、方法时,这些修饰符之间以空格分开,写在class关键字之前,修饰符之间的先后排列次序对类的性质没有影响。面向对象的程序设计类访问权限修饰符-public(公共的)用public关键字修饰的一个类,表明该类可以被任何其它类使用。如果一个类没有public修饰符,则这个类只能在它所包含的包中访问。一个Java源文件包含几个类定义时,只能有一个public类,文件名与public类名完全一致(包括大小写也必须一致)。面向对象的程序设计域域域是类和对象的静态属性,可以是基本数据类型的变量,或其他类(系统类或用户自定义类)的对象。定义域的操作就是说明变量或创建对象的操作。与类相似,域也可以拥有若干修
16、饰符,包括访问控制符和非访问控制符。非访问控制符有静态、最终及易失。面向对象的程序设计1.静态域(static)用static修饰符修饰的域是仅属于类的静态域。静静态态域域的的本本质质:它们是类的域,不属于任何一个类的具体对象。它不是保存在某个对象的内存空间中,而是保存在类的内存区域的公共存储单元。即,对于该类的任何一个具体对象,静态域是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值;任何一个类的对象去修改它时,都是在对同一个内存单元进行操作。面向对象的程序设计2.静态初始化器静态初始化器是由关键字static引导的一对大括号括起的语句组。作用类似于类的构造函数,用来完成初
17、始化工作,但静态初始化器与构造函数根本不同点的原因在于:(1)构造函数是对新创建的对象初始化,而静态初始化器是对类自身进行初始化。(2)构造函数是在用new产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行。(3)不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。面向对象的程序设计class PhoneCard200 static long nextCardNumber;long cardNumber;int password;double balance;static nextCardNumber=2001800001;PhoneCard2
18、00()cardNumber=nextCardNumber+;例:使用静态初始化器,在加载类时初始化类的静态域。面向对象的程序设计3.最终域(final)final修修饰饰符符:修修饰饰常常量量。一个类的域若被声明为final,则其取值在程序的整个执行过程中都不会改变。例如PhoneCard200类中的接入号码,对于200电话卡是固定的字符串200,根据问题的实际情况,这个数据不需要也不应该被改变,故把它定义为最终域。static final String connectNumber=200;面向对象的程序设计用final修饰符说明常量时,需要注意:(1)需要说明常量的数据类型。(2)需要同时
19、指出常量的具体取值。(3)因为所有类对象的常量成员,其数值都固定一致,为了节省空间,常量通常声明为static。面向对象的程序设计 4.易失域(易失域(volatile)如果一个域被volatile修饰符所修饰,说明这个域可能同时被几个线程所控制和修改,即这个域不仅仅被当前程序所掌握,在运行过程中可能存在其他未知的程序操作来影响和改变该域的取值。通常,volatile用来修饰接受外部输入的域。如表示当前时间的变量将由系统的后台线程随时修改,以保证程序中取到的总是最新的当前的系统时间,所以可以把它定义为易失域。面向对象的程序设计方法方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的
20、数据封装在一起。Java的方法,由方法头和方法体组成,其一般格式如下:修饰符1 修饰符2 返回值类型 方法名(形参列表)throw 异常列表方法体各语句;面向对象的程序设计形参列表的格式为:形参类型1 形参名1,形参类型2 形参名2 小括号是方法的标志,程序使用方法名来调用方法,形式参数是方法从调用它的环境输入的数据,返回值是方法在操作完成后返还给调用它的环境的数据。定义方法的目的是定义具有相对独立和常用功能的模块,使程序结构清晰,也利于模块在不同场合的重复利用。例如例3-5,把求完全数功能的程序写成方法isPerfect(),并在主类的main()方法中调用。面向对象的程序设计例 3-5 P
21、erfectNum.javapublic class PerfectNum public static void main(String args)int count=1;for(int i=1;i1000;i+)if(isPerfect(i)System.out.print(i+String.valueOf(t);count+;if(count%3=0)System.out.println();static boolean isPerfect(int x)int y=0;for(int i=1;i=0);balance=current;return times-1;class PhoneCa
22、rd200 extends PhoneCard static long nextCardNumber;static final String connectNumber=200;static double additoryFee;long cardNumber;int password;boolean connected;static nextCardNumber=2001800001;additoryFee=0.1;PhoneCard200(double ib)cardNumber=nextCardNumber+;balance=ib;void performDial()balance-=0
23、.5+additoryFee;class IC_Card extends PhoneCard IC_Card(double ib)balance=ib;void performDial()balance-=0.9;面向对象的程序设计2.静态方法(静态方法(static)用static修饰符修饰的方法,是属于整个类的类方法;而不用static修饰符限定的方法,是属于某个具体类对象或实例的方法。面向对象的程序设计声明一个方法为声明一个方法为static的意义:的意义:(1)调用该方法时,应使用类名做前缀,而不是某一具体的对象名;(2)非static的方法是属于某个对象的方法,在这个对象创建时,对象
24、的方法在内存中拥有自己专用的代码段;static方法属于整个类,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有;(3)static方法只能处理方法只能处理static域。域。面向对象的程序设计3.最终方法(最终方法(final)final修饰符所修饰的类方法,不能被当前类的子类重新定义的方法。在面向对象的程序设计中,子类可以把从父类那里继承来的某个方法改写并重新定义,形成同父类方法同名,解决的问题也相似,但具体实现和功能却不尽一致的新的类方法,这个过程称为覆盖。如果类的某个方法被final修饰符所限定,则该类的子类就不能再重新定义与此方法同名的自己的方法,而仅能使用从父类继
25、承来的方法。这样,就固定了这个方法所对应的具体操作,可以防止子类对父类关键方法的重定义,保证了程序的安全性和正确性。面向对象的程序设计注意:所有已被private修饰符限定为私有的方法,以及所有包含在final类中的方法,都被缺省地认为是final。这些方法要么不可能被子类所继承,要么根本没有子类,所以都不可能被覆盖,自然都是最终的方法。4.本地方法(本地方法(native)native修饰符一般用来声明用其他语言书写方法体并具体实现方法功能的特殊的方法,包括C、C+、汇编、FORTRAN等。由于native的方法的方法体使用其他语言在程序外部写成,所以所所有有的的native方方法法都都没没
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 JAVA面向对象编程 JAVA 面向 对象 编程
限制150内