版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 面向对象(下)1第1页,共62页。主要内容 this与super 构造方法的多态与继承 抽象类与接口 引用 类的其他相关内容2第2页,共62页。6.1 this与super 6.1.1 this的用法this指代当前对象 this()this.成员变量 this.成员方法this当参数传递给其他方法【例6.1】3第3页,共62页。6.1.2 supersuper引用当前对象继承自父类的成员 super.数据成员 super.成员方法 super()4第4页,共62页。 class Person int age; int height; void eat() void sleep() P
2、erson() class Student extends Person int score; Student() void study() this可引用的范围Person()Student score study() Student() age height eat() sleep() super可引用的范围5第5页,共62页。运行结果如下:x=4 y=1class name: Ax=5 y=1class name: AAI am an AAz=10 x=6 super.x=5 y=1 super.y=1【例6.2】Ax=4;y=1Void Printme()AAx=4;y=1xVoid
3、Printme() int z=super.x+6;super.x=5super.Printme(); System.out.println(I am an +this.getClass().getName(); 。x=4在子类对象中隐藏此处调用的是父类代码及对应的父类对象中的属性成员。6第6页,共62页。6.2 构造函数的多态和继承一个类可以定义多个构造函数,构造函数之间用this()相互调用构造函数不能被继承,可以在子类构造函数中用super()调用父类构造函数【例6.3】【例6.4】7第7页,共62页。6.3 抽象类6.3.1 抽象类的定义用abstract修饰的类称为抽象类,用abst
4、ract修饰的成员方法称为抽象方法。对于抽象方法,在抽象类中只指定方法名及类型,而不写实现代码。8第8页,共62页。public abstract class 类名 extends 父类名列表 /数据成员声明 /抽象方法声明 publicabstract返回值 方法名(参数列表)throw 异常列表 【例6.5】9第9页,共62页。 抽象类中可以有零个或多个抽象方法,也可以包含非抽象方法。只要有一个抽象方法,类前就必须有abstract修饰。若没有抽象方法,类前也可有abstract修饰。10第10页,共62页。 抽象类不能创建对象,创建对象由具体子类来实现,但可以有声明,声明能引用所有具体子
5、类的对象。11第11页,共62页。 抽象类必定要派生子类,若派生的子类是具体类,则具体子类中必须实现抽象类中定义的所有抽象方法(覆盖);若子类还是抽象类,父类中已有的abstract方法,则子类中就不能再有。 12第12页,共62页。 在抽象类中,非抽象方法可以调用抽象方法。 abstract不能与final并列修饰同一个类;abstract 不能与private ,static,final或 native并列修饰同一个方法;abstract 类中不能有private成员 13第13页,共62页。6.3.2 抽象类的产生过程抽象类形成的思维过程:客观事物对象类抽象类。如:矩形、三角形、圆形类的
6、属性和方法如图 :(x,y)(x,y)widthheightrxyzwidthheight(x,y)14第14页,共62页。对以上三类进行抽象 :图6415第15页,共62页。6.3.3 抽象类在继承方面的应用【例6.6】简化子类定义明晰类的层次关系16第16页,共62页。6.3.4 引用具体子类对象【例6.7】17第17页,共62页。6.3.5 抽象类设计注意事项抽取同类对象的共同行为包含对象的本质尽可能简单18第18页,共62页。6.4 接口(interface)接口的两种含义:可以被引用调用的方法(public方法或同包中的protected方法或默认方法);另一种是同“类”概念地位相当
7、的专有概念interface, interface是方法说明的集合。19第19页,共62页。 interface声明格式 public interface 接口名extends 父接口名列表 /静态常量数据成员声明 publicstaticfinal 域类型 域名 = 常量值 /抽象方法声明 publicabstract返回值 方法名(参数列表)throw 异常列表 20第20页,共62页。 定义接口要注意几点接口定义用关键字interface,而不是用class,interface前的修饰符要么为public,要么为缺省。接口具有继承性,可通过extends关键字声明接口的父接口。21第21
8、页,共62页。 接口定义的数据成员全是final static(静态常量)。即使没有修饰符,其效果也等效,访问级别要么为public,要么为缺省。22第22页,共62页。 接口中没有构造方法;所有成员方法都是抽象方法(与抽象类有所不同)。即使没有修饰符,其效果完全等效,访问级别要么为public,要么为缺省。注:方法前不能修饰为final。23第23页,共62页。6.4.2 接口的角色 接口扮演将实现者和使用者有机联系到一起的角色。24第24页,共62页。6.4.3 接口实现与使用给接口中的方法定义具体的操作就是接口的实现在类的声明中用implements子句来表示一个类实现了某个接口。25第
9、25页,共62页。 接口实现要注意几点一个类可以实现多个接口,在implements后用逗号隔开多个接口的名字。一个接口也可被多个类来实现。接口的实现者可以继承接口中定义的常量,其效果等效于在这个实现类当中定义了一个静态常量。26第26页,共62页。 如果实现某接口的类不是abstract的抽象类,则类必须实现接口的所有抽象方法,而且方法头部分应该与接口中的定义完全一致。 如果实现接口的类是abstract类,则它可以不实现该接口的所有方法。27第27页,共62页。 接口的抽象方法的访问限制符只能为缺省或public,类在实现方法时,必须显式使用public修饰符,否则将被警告为缩小了接口中定
10、义的方法的访问控制范围。【例6.8】28第28页,共62页。6.5 抽象类与接口抽象类接口共同点 二者都可具有抽象方法,都不能实例化,但都可以有自己的声明,并能引用子类或实现类对象。不同点属性变量可以有变量 不能有,只能是静态常量。成员方法 可以有具体方法(而且具体方法可以调用抽象方法)。如果有方法,则全部是抽象方法。实现策略必须有子类继承必须有实现类实现扩展性弱强29第29页,共62页。6.6 引 用引用如何形成:先声明,后赋予对象,成为引用。抽象类声明进行引用有什么特点? 抽象类引用可以指向所有具体子类对象,此概念可以推广到所有具有父子关系的类,以及接口和实现类30第30页,共62页。引用
11、可以替换吗? 替换是有原则的:父类引用可以指向子类对象,子类声明不能引用平行级别的其它类的对象,也不能引用父类对象。31第31页,共62页。父类声明和子类声明引用同一个子类对象有什么区别? 父类声明是从父类的角度去引用对象,子类声明是从子类角度引用对象。父类引用子类对象时,可以经过显式的转化赋给子类的声明,但子类的引用赋值给父类的声明则不需要。32第32页,共62页。接口声明进行引用有什么特点? 只能引用实现类对象的接口方法。33第33页,共62页。6.7 类的其它相关内容 6.7.1 类的初始化构造方法声明时初始化静态块实例块 34第34页,共62页。静态块class A static./静
12、态块静态块在类被加载到内存时被执行非静态成员变量不能在静态块中使用静态块主要用来初始化静态变量及静态方法35第35页,共62页。 class Outer static int a=10; static System.out.println(“Hi”); a=30; Outer()System.out.println(“创建对象”); public static void main(String args) Outer outer=new Outer(); System.out.println(“Hello”); System.out.println(a); 36第36页,共62页。实例块cla
13、ss A ./实例块实例块在创建类的实例对象时被执行实例块先于构造函数执行37第37页,共62页。 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.out.println(outer.a); 38第38页,共62页。 6.7.2 内部类(Inner Class ) 在一个类的内部嵌套定义
14、的另一个类,称为内部类。包含内部类的类称为外部类。 39第39页,共62页。 定义内部类与普通类定义基本相同内部类如果定义在外部类成员的位置,可看作外部类的成员,能被protected或private修饰内部类定义在方法内,则不能被任何修饰符修饰40第40页,共62页。种类说明 成员类作为类的成员而存在于某个类的内部静态类 作为类的静态成员而存在于某个类的内部匿名类 存在某个类内部,但无名称的类局部类存在某个方法内部的类41第41页,共62页。 成员类(member class)成员类形式如下: class Outer class Inner 42第42页,共62页。Inner类可以引用Out
15、er类的所有成员,包括被private修饰的 class Outer private int a=10; void f() class Inner int d=a; f(); 43第43页,共62页。Outer类与Inner类成员重名时,利用关键字this引用成员44第44页,共62页。 class Outer int a; class Inner int a=20; void f() int a=10; System.out.println(a); System.out.println(this.a); System.out.println(Outer.this.a); 45第45页,共62
16、页。成员类的成员不能为static成员,但允许静态常量存在 class Outer class Inner int a; /可以 void f() /可以 static final int b=10;/可以 static int c; /错误 static void g(). /错误 46第46页,共62页。只有创建了Outer类对象之后,才能创建Inner类对象,才能使用Inner类的成员 Outer out=new Outer(); Outer.Inner in=out.new Inner();【例6.9】47第47页,共62页。静态类(static class)静态类形式如下: clas
17、s Outer static class Inner 48第48页,共62页。静态类Inner只能引用Outer类的static成员,不能引用普通成员 class Outer static int a=10; void f() static class Inner int d=a;/static变量 f(); /不能引用普通方法 49第49页,共62页。Inner类作为Outer类的静态成员,可以在不创建Outer类对象的条件下,直接创建Inner类对象 Outer.Inner in=new Outer.Inner();【例6.10】50第50页,共62页。 局部类(local class)局
18、部类形式如下: void f() class Inner 51第51页,共62页。局部类与局部变量类似,仅在方法内部才可以创建对象,一旦方法执行完毕,就会释放内存而消亡。52第52页,共62页。局部类可以引用包含自身的类的所有成员 class Outer int a=10; void f() class Inner System.out.println(a); 53第53页,共62页。局部类只能引用方法体内的常量,不能访问方法体内的局部变量 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】54第54页,共62页。 匿名类(anonymous class)没有类名的内部类就是匿名类。用一条语句完成匿名类的定义与实例创建。 格式一: class A new 类A() /定义类且创建对象 方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年湖南省耒阳市高二生物下册期末考试检测卷(综合卷)附答案
- 2026年云南省文山市高二生物下册期末考试考试卷及参考答案【培优B卷】
- 2026年福建省永安市高二生物下册期末考试测试卷附参考答案(满分必刷)
- 2025年云南省个旧市高二生物下册期末考试检测卷【各地真题】附答案
- 2026年辽宁省灯塔市高二生物下册期末考试检测卷【能力提升】附答案
- 2025年吉林省榆树市高二生物下册期末考试检测卷及答案【各地真题】
- 2025年江苏省常熟市高二生物下册期末考试检测卷含答案【预热题】
- 2026年吉林省临江市高二生物下册期末考试检测卷含完整答案【有一套】
- 2026年湖南省汨罗市高二生物下册期末考试检测卷及答案【易错题】
- 2026年云南省景洪市高二生物下册期末考试试卷含答案【新】
- 2025年四川省自贡市地理生物会考真题试卷+答案
- GB 26396-2026洗涤用品安全技术规范
- 2026年上海市宝山区中考一模化学试卷
- 2026年郴州思科职业学院《形势与政策》期末考试练习题及答案详解
- 2026年科级干部任职资格政治理论考核要点
- 东南大学2024综评数学试卷
- 医院质量与安全管理架构图
- 张北凯嘉罗矿业有限公司河北省张北县石头囫囵闪锌矿矿山地质环境保护与土地复垦方案
- 电子证据诉讼实务培训
- 英语电影赏析(山东联盟)智慧树知到答案章节测试2023年山东科技大学
- 作文素材积累:《心灵奇旅》-平凡的人也有独特的价值
评论
0/150
提交评论