第六章java程序设计语言ppt课件_第1页
第六章java程序设计语言ppt课件_第2页
第六章java程序设计语言ppt课件_第3页
第六章java程序设计语言ppt课件_第4页
第六章java程序设计语言ppt课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章第六章 面向对象下面向对象下主要内容l this与与superl 构造方法的多态与承继构造方法的多态与承继l 笼统类与接口笼统类与接口l 援用援用l 类的其他相关内容类的其他相关内容6.1 this与super 6.1.1 this的用法的用法this指代当前对象指代当前对象 this()this.成员变量成员变量 this.成员方法成员方法this当参数传送给其他方法当参数传送给其他方法【例【例6.1】6.1.2 supersuper援用当前对象承继自父类的成员援用当前对象承继自父类的成员 super.数据成员数据成员 super.成员方法成员方法 super() class Pers

2、on int age; int height; void eat() void sleep() Person() class Student extends Person int score; Student() void study() this可援可援用的范围用的范围Person()Student score study() Student() age height eat() sleep() super可援可援用的范围用的范围运转结果如下:运转结果如下:x=4 y=1class name: Ax=5 y=1class name: AAI am an AAz=10 x=6 super.x=

3、5 y=1 super.y=1【例【例6.2】Ax=4;y=1Void Printme()AAx=4;y=1xVoid Printme() int z=super.x+6;super.x=5super.Printme(); System.out.println(I am an +this.getClass().getName(); 。x = 4 在 子在 子类 对 象 中类 对 象 中隐藏隐藏此处调用的是父类代此处调用的是父类代码及对应的父类对象码及对应的父类对象中的属性成员。中的属性成员。6.2 构造函数的多态和承继n一个类可以定义多个构造函数,构造函数之间用this()相互调用n构造函数不

4、能被承继,可以在子类构造函数中用super()调用父类构造函数【例【例6.3】【例【例6.4】6.3 笼统类笼统类6.3.1 笼统类的定义笼统类的定义用用abstract修饰的类称为笼统类,修饰的类称为笼统类,用用abstract修饰的成员方法称为笼统方法。修饰的成员方法称为笼统方法。对于笼统方法,在笼统类中只指定方法名对于笼统方法,在笼统类中只指定方法名及类型,而不写实现代码。及类型,而不写实现代码。public abstract class 类名类名 extends 父类名列表父类名列表 /数据成员声明数据成员声明 /笼统方法声明笼统方法声明 publicabstract前往值前往值 方法

5、名方法名(参数参数列表列表)throw 异常列表异常列表 【例【例6.5】 笼统类中可以有零个或多个笼统方法,也笼统类中可以有零个或多个笼统方法,也可以包含非笼统方法。可以包含非笼统方法。只需有一个笼统方法,类前就必需有只需有一个笼统方法,类前就必需有abstract修饰。假设没有笼统方法,类前也修饰。假设没有笼统方法,类前也可有可有abstract修饰。修饰。 笼统类不能创建对象,创建对象由详笼统类不能创建对象,创建对象由详细子类来实现,但可以有声明,声明能细子类来实现,但可以有声明,声明能援用一切详细子类的对象。援用一切详细子类的对象。 笼统类必定要派生子类,假设派生的子类笼统类必定要派生

6、子类,假设派生的子类是详细类,那么详细子类中必需实现笼统类是详细类,那么详细子类中必需实现笼统类中定义的一切笼统方法覆盖;假设子类中定义的一切笼统方法覆盖;假设子类还是笼统类,父类中已有的还是笼统类,父类中已有的abstract方法,方法,那么子类中就不能再有。那么子类中就不能再有。 在笼统类中,非笼统方法可以调用笼统在笼统类中,非笼统方法可以调用笼统方法。方法。 abstract不能与不能与final并列修饰同一个类;并列修饰同一个类;abstract 不能与不能与private ,static,final或或 native并列修饰同一个方法;并列修饰同一个方法;abstract 类类中不能

7、有中不能有private成员成员 6.3.2 笼统类的产生过程笼统类构成的思想过程:客观事物笼统类构成的思想过程:客观事物对象对象类类笼统类。笼统类。如:矩形、三角形、圆形类的属性和方法如图如:矩形、三角形、圆形类的属性和方法如图 :Protected int x,y;Protected int width,height;Public double getPerimeter()Public double getArea()矩矩形形Protected int x,y;Protected double radius;Public double getPerimeter()Public double

8、 getArea()圆圆x,yx,ywidthheightrxyzwidthheightx,y对以上三类进展笼统对以上三类进展笼统 :Public double getPerimeter()Public double getArea()矩矩形形Public double getPerimeter()Public double getArea()圆圆Public double getPerimeter()Public double getArea()三三角角形形图64protected int x,y,k;protected double m ;abstract public double ge

9、tPerimeter()abstract public double getArea()s sh ha ap pe es s6.3.3 笼统类在承继方面的运用【例【例6.6】n简化子类定义n明晰类的层次关系 public double x,y; public double k,m; public double getPerimeter() public double getArea()T Tr ri ia an ng gl le e public double x,y; public double k,m; public double getPerimeter() public double

10、getArea()C Ci ir rc cl le et tr ri i6.3.4 援用详细子类对象【例【例6.7】6.3.5 笼统类设计本卷须知n抽取同类对象的共同行为n包含对象的本质n尽能够简单6.4 接口接口interface接口的两种含义:可以被援用调用的方法public方法或同包中的protected方法或默许方法;另一种是同“类概念位置相当的专有概念interface, interface是方法阐明的集合。 interface声明格式 public interface 接口名extends 父接口名列表 /静态常量数据成员声明 publicstaticfinal 域类型 域名 =

11、常量值 /笼统方法声明 publicabstract前往值 方法名(参数列表)throw 异常列表 定义接口要留意几点接口定义用关键字interface,而不是用class,interface前的修饰符要么为public,要么为缺省。接口具有承继性,可经过extends关键字声明接口的父接口。 接 口 定 义 的 数 据 成 员 全 是接 口 定 义 的 数 据 成 员 全 是 f i n a l static(静态常量静态常量)。即使没有修饰符,其。即使没有修饰符,其效果也等效,访问级别要么为效果也等效,访问级别要么为public,要么为缺省。要么为缺省。 接口中没有构造方法;一切成员方法都

12、是接口中没有构造方法;一切成员方法都是笼统方法与笼统类有所不同。即使没笼统方法与笼统类有所不同。即使没有修饰符,其效果完全等效,访问级别要有修饰符,其效果完全等效,访问级别要么为么为public,要么为缺省。注:方法前不,要么为缺省。注:方法前不能修饰为能修饰为final。6.4.2 接口的角色 接口扮演将实现者和运用者有机联络到一同的角色。6.4.3 接口实现与运用给接口中的方法定义详细的操作就是接口的实现在类的声明中用implements子句来表示一个类实现了某个接口。 接口实现要留意几点一个类可以实现多个接口,在implements后用逗号隔开多个接口的名字。一个接口也可被多个类来实现。

13、接口的实现者可以承继接口中定义的常量,其效果等效于在这个实现类当中定义了一个静态常量。 假照实现某接口的类不是假照实现某接口的类不是abstract的笼的笼统类,那么类必需实现接口的一切笼统方统类,那么类必需实现接口的一切笼统方法,而且方法头部分应该与接口中的定义法,而且方法头部分应该与接口中的定义完全一致。完全一致。 假照实现接口的类是假照实现接口的类是abstract类,那么类,那么它可以不实现该接口的一切方法。它可以不实现该接口的一切方法。 接口的笼统方法的访问限制符只能为接口的笼统方法的访问限制符只能为缺省或缺省或public,类在实现方法时,必,类在实现方法时,必需显式运用需显式运用

14、public修饰符,否那么将修饰符,否那么将被警告为减少了接口中定义的方法的被警告为减少了接口中定义的方法的访问控制范围。访问控制范围。【例【例6.8】6.5 笼统类与接口抽象类接口共同点 二者都可具有抽象方法,都不能实例化,但都可以有自己的声明,并能引用子类或实现类对象。不同点属性变量可以有变量 不能有,只能是静态常量。成员方法 可以有具体方法(而且具体方法可以调用抽象方法)。如果有方法,则全部是抽象方法。实现策略必须有子类继承必须有实现类实现扩展性弱强6.6 引引 用用l援用如何构成:先声明,后赋予对象,援用如何构成:先声明,后赋予对象,成为援用。成为援用。l笼统类声明进展援用有什么特点?

15、笼统类声明进展援用有什么特点?l 笼统类援用可以指向一切详细子类对笼统类援用可以指向一切详细子类对象,此概念可以推行到一切具有父子关系象,此概念可以推行到一切具有父子关系的类,以及接口和实现类的类,以及接口和实现类l援用可以交换吗?l 交换是有原那么的:父类援用可以指向子类对象,子类声明不能援用平行级别的其它类的对象,也不能援用父类对象。l父类声明和子类声明援用同一个子类对象有什么区别? l 父类声明是从父类的角度去援用对象,子类声明是从子类角度援用对象。父类援用子类对象时,可以经过显式的转化赋给子类的声明,但子类的援用赋值给父类的声明那么不需求。l接口声明进展援用有什么特点?接口声明进展援用

16、有什么特点?l 只能援用实现类对象的接口方法。只能援用实现类对象的接口方法。6.7 类的其它相关内容 6.7.1 类的初始化构造方法声明时初始化静态块实例块 静态块class A static./静态块静态块在类被加载到内存时被执行非静态成员变量不能在静态块中运用静态块主要用来初始化静态变量及静态方法 class Outer static int a=10; static System.out.println(“Hi); a=30; Outer()System.out.println(“创建对象创建对象); public static void main(String args) Outer

17、outer=new Outer(); System.out.println(“Hello); System.out.println(a); 实例块class A ./实例块实例块在创建类的实例对象时被执行实例块先于构造函数执行 class Outer int a; System.out.println(“实例块实例块); a=30; public Outer(int a) System.out.println(“构造函数构造函数); this.a=a; public static void main(String args) Outer outer=new Outer(10) System.o

18、ut.println(outer.a); 6.7.2 内部类内部类(Inner Class ) 在一个类的内部嵌套定义的另在一个类的内部嵌套定义的另一个类,称为内部类。包含内一个类,称为内部类。包含内部类的类称为外部类。部类的类称为外部类。 定义内部类与普通类定义根本一样内部类假设定义在外部类成员的位置,可看作外部类的成员,能被protected或private修饰内部类定义在方法内,那么不能被任何修饰符修饰种类种类说明说明 成员类成员类作为类的成员而存在于某个类作为类的成员而存在于某个类的内部的内部静态类静态类 作为类的静态成员而存在于某作为类的静态成员而存在于某个类的内部个类的内部匿名类匿

19、名类 存在某个类内部,但无名称的存在某个类内部,但无名称的类类局部类局部类存在某个方法内部的类存在某个方法内部的类 成员类(member class)成员类方式如下: class Outer class Inner Inner类可以援用Outer类的一切成员,包括被private修饰的 class Outer private int a=10; void f() class Inner int d=a; f(); Outer类与Inner类成员重名时,利用关键字this援用成员 class Outer int a; class Inner int a=20; void f() int a=10

20、; System.out.println(a); System.out.println(this.a); System.out.println(Outer.this.a); 成员类的成员不能为static成员,但允许静态常量存在 class Outer class Inner int a; /可以 void f() /可以 static final int b=10;/可以 static int c; /错误 static void g(). /错误 只需创建了Outer类对象之后,才干创建Inner类对象,才干运用Inner类的成员 Outer out=new Outer(); Outer.

21、Inner in=out.new Inner();【例【例6.9】静态类(static class)静态类方式如下: class Outer static class Inner 静态类Inner只能援用Outer类的static成员,不能援用普通成员 class Outer static int a=10; void f() static class Inner int d=a;/static变量 f(); /不能援用普通方法 Inner类作为Outer类的静态成员,可以在不创建Outer类对象的条件下,直接创建Inner类对象 Outer.Inner in=new Outer.Inner(

22、);【例【例6.10】 部分类(local class)部分类方式如下: void f() class Inner 部分类与部分变量类似,仅在方法内部才可以创建对象,一旦方法执行终了,就会释放内存而消亡。部分类可以援用包含本身的类的一切成员 class Outer int a=10; void f() class Inner System.out.println(a); 部分类只能援用方法体内的常量,不能访问方法体内的部分变量 class Outer void f(final int a,int b) int c=10; final int d=40; class Inner System.out.println(a); System.out.println(b); /错误 System.out.println(d); 【例【例6.11】 匿名类(anonymous class)没有类名的内部类就是匿名类。用一条语句完成匿名类的定义与实例

温馨提示

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

评论

0/150

提交评论