轻工学院java语言程序设计第五讲_第1页
轻工学院java语言程序设计第五讲_第2页
轻工学院java语言程序设计第五讲_第3页
轻工学院java语言程序设计第五讲_第4页
轻工学院java语言程序设计第五讲_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java程序设计 第五讲Java面向对象的特征(二)1构造方法(constructor)问题的提出Java试图在每个对象一诞生时,就给它一个指定的状态(即成员变量的初值),但有时系统的缺省初值并不合适;所以在创建一个新对象时,需用构造方法完成合法的初始化,使成员变量的初始化工作不依赖于外界(系统)完成。构造方法是一种特殊的成员方法,构造方法与类同名。在创建每个新对象时自动执行,以保证新对象的各成员都有合法、确定的初值。2构造方法(例)class Dog private int weight ;public Dog() / Dog类的构造方法weight = 42 ; /实现对象状态(成员变量)

2、的初始化public int getWeight() return weight;public void setWeight(int myWeight) weight = myWeight;public class UseDogpublic static void main(String args)Dog d = new Dog(); /用构造方法创建对象System.out.println(The dogs weight is + d.getWeight();The dogs weight is 42运算结果:3构造方法的特点构造方法与成员方法不同,不能被直接调用,必须通过new调用; 创建

3、对象时,利用运算符 new 在内存中开辟专用空间,存放指定的类的实例(即对象),这时会自动执行类的构造方法,初始化新对象的成员变量. 例:Date d = new Date (22, 5, 2003);4构造方法的特点(续)构造方法没有返回类型,但声明时也不加void。构造方法可以完成更多的操作,而不仅仅局限于变量的初始化。(如在构造方法中调用其他方法等。)5一个类可创建多个构造方法:构造方法的重载。例: class Date( ) Date( ) Date(int x, int y ) Date(int x, char y ) Date d1=new Date( ) Date d2=new

4、Date(5,A ) Date d3=new Date(5,12) /分加调用不同的构造方法6构造方法的缺省每一个类至少有一个构造方法。当未定义任何构造方法时,系统在编译时,会提供一个缺省构造方法:无参数,方法体中没有内容缺省构造方法的初始化数据初值: 数值型:0; 布尔型:false; 引用型:null; 字符串型:null;一旦定义了构造方法,则缺省构造方法自动失效7构造方法的缺省:例class Dog /程序员未定义构造方法private int weight ;public int getWeight() return weight;public void setWeight(int

5、myWeight) weight = myWeight;public class UseDogpublic static void main(String args)Dog d = new Dog(); /用缺省的构造方法创建对象System.out.println(The dogs weight is + d.getWeight();The dogs weight is 0运算结果:8以“this” 调用构造方法this(参数列表) 表示调用本类的构造方法在一个构造方法中,当使用this 并给它一个参数列表时,this显式调用参数匹配的另一个构造方法。使用this调用本类的其他构造方法时,t

6、his应是第一个可执行语句9Java中对象的生命周期对象是某一个类的实例,是运行时动态生成的。对象如何创建、使用、回收?10Java中对象的创建对象的声明 Point p1,p2;对象的实例化 p1 = new Point(); p2 = new Point(); new 返回类对象的一个引用 Point p3 = p2;对象的声明和实例化可写在同一条命令中 Point p4 = new Point();p1 0 xabcdxy 0.00.00 xabcd11对象的使用访问对象的成员变量 对象.成员变量调用对象的方法 对象.方法注意对象中成员变量和方法的访问权限管理。12对象的回收一个对象在没

7、有引用指向它时,可作为垃圾收集。垃圾收集器:Java运行环境中的垃圾收集器周期性地释放不用对象所占用的空间,自动实现内存回收。13子类表示类之间一种“属于”( is a )关系。例:public class Employee String name ;Date hireDate ;Date dateofBirth ;String jobTitle ;int grade ;public class Manager String name ;Date hireDate ;Date dateofBirth ;String jobTitle ;int grade ;String department

8、;类的继承:子类14 语法:Java中用 extends 关键字定义子类。public class Employee String name ;Date hireDate ;Date dateofBirth ;String jobTitle ;int grade ;子类是从已有的类创建新类的一种方法。 父类 来自系统类库或者是用户自定义类 。public class Manager extends Employee String department ;类的继承:extends 关键字15类的继承 子类将继承除 private外所有父类成员,(带private 修饰符的属性、方法是不能被继承的

9、) Java是单继承的,不支持多重继承(但可用接口实现),extends后的类名只能有一个。16类的继承:扩展 子类对父类可做扩展和特殊化。子类继承父类的属性,方法,子类中只需声明特有的东西。创建新的成员:变量和方法 重新定义父类中已有的变量:父类变量被隐藏重新定义父类中已有的方法 :重写 or 覆盖(override ) 子类中的方法应与父类中的被重写的方法有完全相同的参数列表、返回值 17方法重写例子18类的继承:this , super引用类的成员变量或方法时的前缀this: 当前类的方法或变量 super: 直接父类的成员(只能上溯一层) 例:Employee父类 Manager子类t

10、his.getDetails():调用子类的方法super.getDetails():调用父类的方法19this指向该关键字所在的类。Super指向该关键字所在类的父类。Public class Empolyee private String name ;private int salary;public String getDetails( )return “Name: ”+name+“nSalary:”+salary;public class Manager extends Empolyee private String department ;public String getDetai

11、ls( ) /子类重写方法return super.getDetailes( )+nDepartment: “+department;this super关键字20构造方法的继承子类没有定义构造方法时,自动继承父类不含参参数的构造方法,并在创建新子类对象时自动执行子类有自己的构造方法时,创建新子类对象时也要先执行父类不含参数的构造方法,再执行自己的构造方法子类的构造方法定义中,如要调用父类的含参数的构造方法,需用super关键字,且该调用语句必须是子类构造方法的第一个可执行语句。21缺省是不带参数的构造方法。如果需要调用特殊的父类构造方法,则需在子类构造方法中第一行通过super( )调用。

12、class Employee .public Employee( String n)name=n;class Manager entends Emplyeepublic Manager( String s, String d)super(s);. 调用父类构造方法22子类可以改变从父类继承的行为。子类可以重写父类的方法,被重写方法的返回值、 方法名、参数列表要与父类中的方法完全一样。类的继承:方法重写(Overriding覆盖)23例子24必须返回与原来方法完全相同的返回值类型。方法的访问权限不能缩小。不能抛出新的异常。在子类中,若要使用父类中被隐藏的方法,可以使用super关键字。方法重写的

13、规则25例子:class A protected int method1(int a, int b). public class B extends A public int method1(int a, int b) . /正确,重写父类方法,可以扩大访问权限 private int method1(int a, int b) . /错误,重写父类方法,不能降低了访问权限 private long method1(int a, int b) . /错误,重写父类方法,不能改变返回值类型 26示例class Point void print() System.out.println(This

14、is the superclass!);public static void main(String args)Point superp = new Point ();superp.print();Point3d subp = new Point3d(); subp.print();class Point3d extends Point void print() System.out.println(This is the subclass!); 运行结果:(This is the superclass!);(This is the subclass!);27示例public class Em

15、ployee String name; int salary; public String getDetails() return Name: +name +“n + Salary: +salary;public class Manager extends Employee String departemnt; public String getDetails() return Name: +name +“n + Manager of +department; 假定说明了如下两个实例: Employee e = new Employee(); Manager m = new Manager()

16、;此时,e.getDetails()与m.getDetails()将执行不同的代码28方法重载(overloading)用同一个名字来表示不同的方法。这些方法同名的原因,是因为它们的最终功能和目的都相同,但由于在完成同一功能时,可能遇到不同的具体情况,所以需要定义不同的具体内容的方法。 是多态的一种体现。(多态包括方法的重载和覆盖)29例子public class A public void showTime () System.out.println (空重载);public void showTime (int l) System.out.println (整形参数重载);public v

17、oid showTime (char l) System.out.println (字符参数重载);30例:public class SC public double area(float a) return (int)(Math.PI*a*a*100)/100.0 ; public double area(float a, float b) return a*b ; public double area(float a, float b, float c) float d;d=(a+b+c)/2 ; return Math.sqrt(d*(d-a)*(d-b)*(d-c) ; public

18、static void main(String args) SC sh=new SC(); System.out.println(圆面积是: +sh.area(3); System.out.println(矩形面积是: +sh.area(7,4); System.out.println(“三角形面积是: +sh.area(3,4,5); 运行结果:圆面积是: 28.27 矩形面积是: 28.0 三角形面积是: 6.031同类中的方法重载:例要打印不同类型的数据,如int, float, String等,实现手段有2种:分别定义不同名的多个方法,如: printInt(int); printFl

19、oat(float); printString(String)等 但这样给程序开发、使用和维护都带来很多麻烦。使用一个方法名print (),通过区别不同的参数,来分别定义和调用不同方法:即,方法重载。如:print (int i); print (float f); print (String s);32方法重载的条件方法名必须相同方法的参数必须不同同名不同方法是靠不同形式的参数列表来区分参数列表包括形参的个数、类型、顺序的不同static void print(String s, int i) static void print(int i, String s) /注意,以上二者参数的顺序

20、不同33方法重载的特点返回类型、修饰符可相同或不相同。(返回类型可以不同,但不是重载的标志。)效果:利用“重名”现象提高程序的抽象度和简洁性。方法重载具有编译时多态。(由编译器在编译时根据参数的区别,来调用相应的方法体)34一个方法如果只声明方法而没有方法的实现(方法体),则称为抽象方法。抽象类必须在类声明中增加 abstract 关键字,在无方法体的方法(抽象方法)前也要加上abstract。public abstract class Drawing /抽象类public abstract void drawDot( int x, int y);/抽象方法public void drawLi

21、ne(int x1, int y1, int x2, int y2) /非抽象方法 抽象类一个abstract 类可以包含有非抽象方法和变量,但至少包含一个抽象方法。35抽象类不能直接用来生成实例。一般通过定义子类进行实例化。可以生成抽象类的变量,该变量可以指向一个子类的实例。abstract class Employeeabstract void raiseSalary(int i) ;class Manager extends Employee /抽象类的子类void raiseSalary(int i ) ./实现抽象方法Employee e = new Manager( ) ;/指向子

22、类实例抽象类36interface 是在抽象类概念的基础上演变而来的。一个interface所有成员方法都是抽象的,并且只能定义 static final 成员变量(常量)。接口 interface37接口的含义 interface 不属于类层次结构,不相关的类可以实现相同的接口。接口:可看作一种“特殊的类”,是作为一个整体声明的抽象方法和常量的集合;方法:隐含为abstract 和public的 常量:隐含为final和static的 创建接口 public interface 接口名 extends 接口列表 方法名(); /注意:没有方法体 常 量 名=. . . ;. . . . .

23、.38Interface FlyertakeOff( )land( )fly( )Class Airplanebrake( ) takeOff( )land( )fly( )Class Birdeat( )layEggs( )takeOff( )land( )fly( )Class Supermaneat( )stopBullet( )takeOff( )land( )fly( )interface 示例:接口与继承Class Animaleat( )Class Vehiclebrake( )39接口 interface使用接口当一个类声明 implements 某一 interface 时,

24、必须具体实现该 interface 中定义的抽象方法,并把此方法定义为public的。用implements代替extends声明子类,该子类中必须实现接口及该接口超类中的所有方法。利用接口可实现多重继承便于设计更合理的类层次,代码更灵活40interface 程序示例例:乐器族谱Music.javaInstrumentWindPercussionStringed管乐器打击乐器弦乐器41interface 程序示例interface Instrument int A=5 ; / 常量定义,默认为static & final / 以下为方法声明,不能定义方法体void play( ); / 默认

25、为public & abstractString type( );void adjust( );class Wind implements Instrument public void play( ) System.out.println(Wind.play( ); / 不能省略public public String type ( ) return Wind; public void adjust( ) /注意 “adjust( ) ;” 与 “adjust( ); ” 的区别42interface 中要注意的问题不能向interface定义中随意增加方法。public interface

26、shape void draw( ); void erase( ); double area( ); /直接在接口中增加方法,会带来所有该接口的子类的维护问题。public interface ShapeWithArea extends Shape /通过子接口来新增方法 double area( ); 43可以通过实现接口来实现多重继承:一个类可只继承一个父类,并实现多个接口。例如:interface I1 ;interface I2 ;class Father . ;class Son extends Father implements I1,I2 接口 interface44interface:多态性例子/定义接口InterA interfaceInterA voidfun(); /实现接口InterA的类B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论