java程序设计语言课件.ppt

上传人(卖家):三亚风情 文档编号:3347653 上传时间:2022-08-22 格式:PPT 页数:62 大小:965KB
下载 相关 举报
java程序设计语言课件.ppt_第1页
第1页 / 共62页
java程序设计语言课件.ppt_第2页
第2页 / 共62页
java程序设计语言课件.ppt_第3页
第3页 / 共62页
java程序设计语言课件.ppt_第4页
第4页 / 共62页
java程序设计语言课件.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、第六章 面向对象(下)1第1页,共62页。主要内容l this与与superl 构造方法的多态与继承构造方法的多态与继承l 抽象类与接口抽象类与接口l 引用引用l 类的其他相关内容类的其他相关内容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.成员方

2、法成员方法 super()4第4页,共62页。class Person 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可引可引用的范围用的范围5第5页,共62页。运行结果如下:运行结果如下:x=4 y=1class name:Ax=5 y=1class name:

3、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 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 构造函数的多态和继承n一个类可

4、以定义多个构造函数,构造函数之间用this()相互调用n构造函数不能被继承,可以在子类构造函数中用super()调用父类构造函数【例【例6.3】【例【例6.4】7第7页,共62页。6.3 抽象类抽象类6.3.1 抽象类的定义抽象类的定义用用abstract修饰的类称为抽象类,修饰的类称为抽象类,用用abstract修饰的成员修饰的成员方法方法称为抽象方法。称为抽象方法。对于抽象方法,在抽象类中只指定方法名及对于抽象方法,在抽象类中只指定方法名及类型,而不写实现代码。类型,而不写实现代码。8第8页,共62页。public abstract class 类名类名 extends 父父类名列表类名列

5、表 /数据成员声明数据成员声明/抽象方法抽象方法声明声明 publicabstract返回值返回值 方法名方法名(参数参数列表列表)throw 异常列表异常列表 【例【例6.5】9第9页,共62页。抽象类中可以有抽象类中可以有零个零个或或多个多个抽象方法,也可抽象方法,也可以包含以包含非抽象非抽象方法。方法。只要有一个抽象方法,类前就必须有只要有一个抽象方法,类前就必须有abstract修修饰。若没有抽象方法,类前也可有饰。若没有抽象方法,类前也可有abstract修饰。修饰。10第10页,共62页。抽象类不能创建对象,创建对象由具抽象类不能创建对象,创建对象由具体子类来实现,但可以有体子类来

6、实现,但可以有声明声明,声明能,声明能引用所有具体子类的对象。引用所有具体子类的对象。11第11页,共62页。抽象类必定要派生子类,若派生的子类是具体类,抽象类必定要派生子类,若派生的子类是具体类,则具体子类中必须实现抽象类中定义的则具体子类中必须实现抽象类中定义的所有抽象所有抽象方法方法(覆盖);若子类还是抽象类,父类中已(覆盖);若子类还是抽象类,父类中已有的有的abstract方法,则子类中就不能再有。方法,则子类中就不能再有。12第12页,共62页。在抽象类中,非抽象方法可以调用抽象方在抽象类中,非抽象方法可以调用抽象方法。法。abstract不能与不能与final并列修饰同一个类;并

7、列修饰同一个类;abstract 不能与不能与private,static,final或或 native并列修饰同一个方法;并列修饰同一个方法;abstract 类类中不能有中不能有private成员成员 13第13页,共62页。6.3.2 抽象类的产生过程抽象类形成的思维过程:客观事物抽象类形成的思维过程:客观事物对象对象类类抽象类。抽象类。如:矩形、三角形、圆形类的属性和方法如图如:矩形、三角形、圆形类的属性和方法如图 :Protected int x,y;Protected int width,height;Public double getPerimeter()Public doubl

8、e getArea()矩矩形形Protected int x,y;Protected double radius;Public double getPerimeter()Public double getArea()圆圆(x,y)(x,y)widthheightrxyzwidthheight(x,y)14第14页,共62页。对以上三类进行抽象对以上三类进行抽象 :Public double getPerimeter()Public double getArea()矩矩形形Public double getPerimeter()Public double getArea()圆圆Public do

9、uble getPerimeter()Public double getArea()三三角角形形图64protected int x,y,k;protected double m;abstract public double getPerimeter()abstract public double getArea()s sh ha ap pe es s15第15页,共62页。6.3.3 抽象类在继承方面的应用【例【例6.6】n简化子类定义n明晰类的层次关系16第16页,共62页。public double x,y;public double k,m;public double getPerim

10、eter()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 getArea()C Ci ir rc cl le et tr ri i6.3.4 引用具体子类对象【例【例6.7】17第17页,共62页。6.3.5 抽象类设计注意事项n抽取同类对象的共同行为n包含对象的本质n尽可能简单18第18页,共62页。6.4 接口(接口(interface)接口的两种含义:n可以被引用调用的方法(publi

11、c方法或同包中的protected方法或默认方法);n另一种是同“类”概念地位相当的专有概念interface,interface是方法说明的集合。19第19页,共62页。interface声明格式 public interface 接口名extends 父接口名列表 /静态常量数据成员声明 publicstaticfinal 域类型 域名=常量值 /抽象方法声明 publicabstract返回值 方法名(参数列表)throw 异常列表 20第20页,共62页。定义接口要注意几点接口定义用关键字interface,而不是用class,interface前的修饰符要么为public,要么为缺省

12、。接口具有继承性,可通过extends关键字声明接口的父接口。21第21页,共62页。接口定义的数据成员全是接口定义的数据成员全是final static(静静态常量态常量)。即使没有修饰符,其效果也等效,。即使没有修饰符,其效果也等效,访问级别要么为访问级别要么为public,要么为,要么为缺省缺省。22第22页,共62页。接口中没有接口中没有构造构造方法;所有成员方法都是方法;所有成员方法都是抽象抽象方法方法(与抽象类有所不同)。即使没有修饰符,(与抽象类有所不同)。即使没有修饰符,其效果完全等效,访问级别要么为其效果完全等效,访问级别要么为public,要,要么为么为缺省缺省。注:方法前

13、不能修饰为。注:方法前不能修饰为final。23第23页,共62页。6.4.2 接口的角色 接口扮演将接口扮演将实现者实现者和和使用者使用者有机有机联系联系到一起的角色。到一起的角色。24第24页,共62页。6.4.3 接口实现与使用给接口中的方法定义具体的操作就是接口的实现在类的声明中用implements子句来表示一个类实现了某个接口。25第25页,共62页。接口实现要注意几点一个类可以实现多个接口,在implements后用逗号隔开多个接口的名字。一个接口也可被多个类来实现。接口的实现者可以继承接口中定义的常量,其效果等效于在这个实现类当中定义了一个静态常量。26第26页,共62页。如果

14、实现某接口的类不是如果实现某接口的类不是abstract的抽象的抽象类,则类必须实现接口的类,则类必须实现接口的所有所有抽象方法,抽象方法,而且方法头部分应该与接口中的定义完全一而且方法头部分应该与接口中的定义完全一致。致。如果实现接口的类是如果实现接口的类是abstract类,则它可以类,则它可以不实现该接口的所有方法。不实现该接口的所有方法。27第27页,共62页。接口的抽象方法的访问限制符只能为接口的抽象方法的访问限制符只能为缺省或缺省或public,类在实现方法时,必须,类在实现方法时,必须显式使用显式使用public修饰符,否则将被警告修饰符,否则将被警告为缩小了接口中定义的方法的访

15、问控制为缩小了接口中定义的方法的访问控制范围。范围。【例【例6.8】28第28页,共62页。6.5 抽象类与接口抽象类接口共同点 二者都可具有抽象方法,都不能实例化,但都可以有自己的声明,并能引用子类或实现类对象。不同点属性变量可以有变量 不能有,只能是静态常量。成员方法 可以有具体方法(而且具体方法可以调用抽象方法)。如果有方法,则全部是抽象方法。实现策略必须有子类继承必须有实现类实现扩展性弱强29第29页,共62页。6.6 引引 用用l引用如何形成:先声明,后赋予对象,成为引引用如何形成:先声明,后赋予对象,成为引用。用。l抽象类声明进行引用有什么特点?抽象类声明进行引用有什么特点?抽象类

16、引用可以指向所有具体子类对象,抽象类引用可以指向所有具体子类对象,此概念可以推广到所有具有父子关系的类,此概念可以推广到所有具有父子关系的类,以及接口和实现类以及接口和实现类30第30页,共62页。l引用可以替换吗?替换是有原则的:父类引用可以指向子类对象,子类声明不能引用平行级别的其它类的对象,也不能引用父类对象。31第31页,共62页。l父类声明和子类声明引用同一个子类对象有什么区别?父类声明是从父类的角度去引用对象,子类声明是从子类角度引用对象。父类引用子类对象时,可以经过显式的转化赋给子类的声明,但子类的引用赋值给父类的声明则不需要。32第32页,共62页。l接口声明进行引用有什么特点

17、?接口声明进行引用有什么特点?只能引用实现类对象的接口方法。只能引用实现类对象的接口方法。33第33页,共62页。6.7 类的其它相关内容 6.7.1 类的初始化n构造方法n声明时初始化n静态块n实例块 34第34页,共62页。静态块class A static./静态块n静态块在类被加载到内存时被执行n非静态成员变量不能在静态块中使用n静态块主要用来初始化静态变量及静态方法35第35页,共62页。class Outer static int a=10;static System.out.println(“Hi”);a=30;Outer()System.out.println(“创建对象创建对

18、象”);public static void main(String args)Outer outer=new Outer();System.out.println(“Hello”);System.out.println(a);36第36页,共62页。实例块class A ./实例块n实例块在创建类的实例对象时被执行n实例块先于构造函数执行37第37页,共62页。class Outer int a;System.out.println(“实例块实例块”);a=30;public Outer(int a)System.out.println(“构造函数构造函数”);this.a=a;public

19、 static void main(String args)Outer outer=new Outer(10)System.out.println(outer.a);38第38页,共62页。6.7.2 内部类内部类(Inner Class)在一个类的内部嵌套定义的另一个类,在一个类的内部嵌套定义的另一个类,称为称为内部类内部类。包含内部类的类称为。包含内部类的类称为外部类外部类。39第39页,共62页。定义内部类与普通类定义基本相同内部类如果定义在外部类成员的位置,可看作外部类的成员,能被protected或private修饰内部类定义在方法内,则不能被任何修饰符修饰40第40页,共62页。种

20、类说明 成员类作为类的成员而存在于某个类的内部静态类 作为类的静态成员而存在于某个类的内部匿名类 存在某个类内部,但无名称的类局部类存在某个方法内部的类41第41页,共62页。成员类(member class)成员类形式如下:class Outer class Inner 42第42页,共62页。Inner类可以引用Outer类的所有成员,包括被private修饰的 class Outer private int a=10;void f()class Inner int d=a;f();43第43页,共62页。Outer类与Inner类成员重名时,利用关键字this引用成员44第44页,共62

21、页。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页。成员类的成员不能为static成员,但允许静态常量存在 class Outer class Inner int a;/可以 void f()/可以 static final int b=10;/可以 static int c;/错误 static void g()./错误 46第46页,共62页

22、。只有创建了Outer类对象之后,才能创建Inner类对象,才能使用Inner类的成员 Outer out=new Outer();Outer.Inner in=out.new Inner();【例【例6.9】47第47页,共62页。静态类(static class)静态类形式如下:class 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();/

23、不能引用普通方法 49第49页,共62页。Inner类作为Outer类的静态成员,可以在不创建Outer类对象的条件下,直接创建Inner类对象 Outer.Inner in=new Outer.Inner();【例【例6.10】50第50页,共62页。局部类(local class)局部类形式如下:void f()class Inner 51第51页,共62页。局部类与局部变量类似,仅在方法内部才可以创建对象,一旦方法执行完毕,就会释放内存而消亡。52第52页,共62页。局部类可以引用包含自身的类的所有成员 class Outer int a=10;void f()class Inner S

24、ystem.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()/

25、定义类且创建对象 方法体 此时产生的对象是类A的子类对象【例【例6.12】55第55页,共62页。格式二:格式二:Interface Anew 接口接口A()()方法体方法体此时产生的对象是接口此时产生的对象是接口A的实现类。的实现类。【例【例6.13】56第56页,共62页。匿名内部类的使用原则匿名内部类的使用原则匿名内部类不能有构造方法匿名内部类不能有构造方法不能定义任何静态成员、方法不能定义任何静态成员、方法不能被不能被public、protected、private、static修饰修饰只能创建一个实例只能创建一个实例57第57页,共62页。6.7.4 匿名对象 匿名对象就是在产生对象

26、时没有显式地为这个对象建立引用。Person p1=new Person();p1.shout();改为new Person().shout();【例【例6.14】58第58页,共62页。匿名对象在两种情况下经常使用:匿名对象在两种情况下经常使用:如果对一个对象只需要进行一次方法调用。如果对一个对象只需要进行一次方法调用。将匿名对象作为参数传递给一个函数调用。将匿名对象作为参数传递给一个函数调用。59第59页,共62页。6.7.5 类对象l在java.lang包中有一个特殊的类Class(注:同关键字class区别的地方是首字母大写),它也继承Object类。60第60页,共62页。通过调用对象方法通过调用对象方法getClass而得到而得到Class对象,对象,进而我们可以知道类的相关的一些特性,如:进而我们可以知道类的相关的一些特性,如:类的名称、类的包、类的方法、类的父类等。类的名称、类的包、类的方法、类的父类等。【例【例6.15】61第61页,共62页。小结 本章深入介绍了Java面向对象的一些概念。重点内容是引用,因为Java中的封装、继承、多态、抽象类、接口等概念都和引用有关。62第62页,共62页。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(java程序设计语言课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|