Java面向对象编程进阶.ppt
《Java面向对象编程进阶.ppt》由会员分享,可在线阅读,更多相关《Java面向对象编程进阶.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 Java面向对象编程进阶 5.15.15.15.1 内部类和匿名类内部类和匿名类内部类和匿名类内部类和匿名类 (略略略略)5.2 5.2 5.2 5.2 抽象类抽象类抽象类抽象类 5.3 5.3 5.3 5.3 继承继承继承继承 5.4 5.4 5.4 5.4 包包包包 5.5 5.5 5.5 5.5 接口接口接口接口abstract class Shape /说明一般二维图形抽象类说明一般二维图形抽象类 abstract double area();/计算图形面积的方法计算图形面积的方法 abstract void draw();/绘制图形的方法绘制图形的方法 有时,由于有时,由于对
2、象高级抽象的需要,希望类只需要说明方法首部,而不对象高级抽象的需要,希望类只需要说明方法首部,而不需要或不可能说明其方法体,其方法体只能由其子类来完成,这样的类需要或不可能说明其方法体,其方法体只能由其子类来完成,这样的类需要使用需要使用abstractabstract关键字修饰,这种类被称为关键字修饰,这种类被称为抽象类抽象类。抽象类不能创建任何对象,抽象类只是用来由其子类继承。继承抽象抽象类不能创建任何对象,抽象类只是用来由其子类继承。继承抽象类的子类比它的父类更加具体化、特殊化。类的子类比它的父类更加具体化、特殊化。例例5-15-1 抽象类抽象类ShapeShape5.2 5.2 抽象类
3、抽象类 class Rectangle extends Shape /矩型类矩型类Rectangle继承了继承了Shape类类 int width;/矩形的宽矩形的宽 int length;/矩形的长矩形的长 punlic double area()return width*length/矩形类实现了矩形类实现了Shape类的抽象方法类的抽象方法area()public void draw()/这里要实现这里要实现Shape类的抽象方法类的抽象方法draw()5.3 5.3 继承继承5.3.1 继承概述继承概述 5.3.2 继承语法格式继承语法格式 5.3.3 子类对父类成员重载子类对父类成员
4、重载 5.3.4 null,this,super5.3.5 多态性多态性5.3.6 final类类(最终类最终类)在在Java编程语言中,通过继承可利用已有的类,并扩展它的属性编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。序员原来编写的。如果在声明类如果在声明类A时,指明类时,指明类A继承了类继承了类B(类(类B是一个已定义了的类)是一个已定义了的类),则类,则类A通常就拥有了类通常就拥有了类B的成员变量和方法。此时,类的成员变量和方法。此时,类B称为
5、类称为类A的父的父类(类(superclass),父类也称为超类或基类;类父类也称为超类或基类;类A称为类称为类B的子类的子类(subclass),),子类也称为派生类。子类也称为派生类。Object类是类是Java中所有类的父类,中所有类的父类,也就是说也就是说Java中的类直接或间接有中的类直接或间接有Object类派生而来。类派生而来。Java中实行单继承,即一个类只能有一个父类。中实行单继承,即一个类只能有一个父类。5.3.1 继承概述继承概述 一个类只可继承一个父类,但一个类可以有被多个子类继承。一个类只可继承一个父类,但一个类可以有被多个子类继承。因而类之间的关系就形成了所谓的树形
6、层次结构:因而类之间的关系就形成了所谓的树形层次结构:类类A类类C1n类类C11类类Bm类类B2类类B1类类Cm1类类Cmn在在JavaJava中,中,java.lang.Objectjava.lang.Object类是类是JavaJava所有类的父类。所有类的父类。类继承语法形式如下:类继承语法形式如下:修饰符修饰符 class SubClassName extends SupperClassName extends是继承关键词。是继承关键词。SubClassName是新的子类名,是新的子类名,SupperClassName是继承的父类名。父类名是必需的,而且只能有一个,是继承的父类名。父类
7、名是必需的,而且只能有一个,因为因为Java中实行单继承。父类名所指定的类必须是在当前编译单元中可中实行单继承。父类名所指定的类必须是在当前编译单元中可以访问的类,否则会产生编译错误。以访问的类,否则会产生编译错误。5.3.2 继承语法格式继承语法格式 子类的特性子类的特性:子类拥有其父类的所有属性和方法。但父类中说明为子类拥有其父类的所有属性和方法。但父类中说明为private的属性和方法,子类不可直接访问。的属性和方法,子类不可直接访问。子类可以对父类的方法覆盖或重载。子类可以对父类的方法覆盖或重载。例例.5-2子类与父类子类与父类 class class A A private priv
8、ate int int a;a;protected protected int int b;b;public public intint c;c;public void public void setAsetA(intint aaaa)a=)a=aaaa;public public int getAint getA()return a;()return a;class class B B extends extends A A intint d;d;public static void main(String public static void main(String args args)B
9、 b1=new B();B b1=new B();b1.b1.setAsetA(10);b1.b=20;b1.c=30;(10);b1.b=20;b1.c=30;b1.d=b1.b1.d=b1.getAgetA()+b1.b+b1.c;()+b1.b+b1.c;System.out.print(b1.d);System.out.print(b1.d);子类可以对父类的方法覆盖或重载。子类可以对父类的方法覆盖或重载。方法覆盖方法覆盖:子类的方法首部与父类的方法首部相同,但是子类重新子类的方法首部与父类的方法首部相同,但是子类重新实现了该方法。实现了该方法。方法重载方法重载:Java中方法可重载中
10、方法可重载,就是方法名相同但形参列表不同之就是方法名相同但形参列表不同之方法。方法。子类的方法对父类的方法也可重载。子类的方法对父类的方法也可重载。5.3.3 5.3.3 子类对父类成员重载子类对父类成员重载 如果子类声明了一个与父类的成员变量同名的成员变量,则称父类如果子类声明了一个与父类的成员变量同名的成员变量,则称父类的该成员变量被的该成员变量被隐藏隐藏(Hiding),),如果子类声明了一个与父类的成员如果子类声明了一个与父类的成员方法同名的成员方法,则称父类的该成员方法被方法同名的成员方法,则称父类的该成员方法被重写重写(Overriding)。)。关键字关键字this和和super
11、分别用来指明子类和父类中同名的成员变量和方法。分别用来指明子类和父类中同名的成员变量和方法。当父类的成员变量、子类的成员变量和类的对象方法使用的局部变量三当父类的成员变量、子类的成员变量和类的对象方法使用的局部变量三者同名,或其中两个同名时,可以使用关键字者同名,或其中两个同名时,可以使用关键字this和和super来指定所要使来指定所要使用的变量。用的变量。继承是面向对象编程的主要优点之一,它对如何设计继承是面向对象编程的主要优点之一,它对如何设计JavaJava类有着直类有着直接的影响。继承有如下几点好处:接的影响。继承有如下几点好处:(1 1)它可以利用已有的类来创建自己的类,只需要指出
12、自己的类和已)它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其它的类有什么不同即可,而且还可以动态访问其它有关的类中的有的其它的类有什么不同即可,而且还可以动态访问其它有关的类中的信息。信息。(2 2)通过继承,可以利用)通过继承,可以利用JavaJava类库所提供的丰富而有用的类,这些类库所提供的丰富而有用的类,这些类都已经被很好地实现。类都已经被很好地实现。(3 3)当设计很大的程序时,继承可以使程序组织得更加层次清晰,有)当设计很大的程序时,继承可以使程序组织得更加层次清晰,有利于程序设计和减少错误的发生。利于程序设计和减少错误的发生。例例5-3 5-3 子类与父类的继承关
13、系子类与父类的继承关系 public class Point /定义定义Point类类 int x;int y;public Point()public Point()/构造方法构造方法,构造原点构造原点(0,0)(0,0)x=0;y=0;x=0;y=0;public Point(public Point(intint X,X,int int Y)Y)/构造方法构造方法,按给定的按给定的X X、Y Y 值值 x=X;y=Y;x=X;y=Y;/构成一个点(构成一个点(X,YX,Y)public double distance()public double distance()/定义方法定义方法,
14、求点到坐标原点的距离求点到坐标原点的距离 return Math.return Math.sqrtsqrt(x*x+y*y);(x*x+y*y);/调用调用MathMath类的方法类的方法sqrtsqrt()()public static void draw()public static void draw()/类方法类方法draw(),draw(),画点画点 System.out.System.out.printlnprintln(Point:a point.Point:a point.););class ColorPoint extends Point class ColorPoint e
15、xtends Point intint color;color;public static void draw()public static void draw()/复盖了父类的复盖了父类的draw()draw()方法方法 System.out.System.out.printlnprintln(“(“ColorPointColorPoint:a color point.”);:a color point.”);class MapPoint extendsclass MapPoint extends ColorPoint ColorPoint /定义类定义类,继承继承ColorPointCol
16、orPoint类类 /类类ObjectObject、PointPoint均是均是MapPointMapPoint的父类的父类,但都不是直接父类但都不是直接父类String name;String name;/地图上的点有自己的名字,如城市名地图上的点有自己的名字,如城市名 public static void draw()public static void draw()/复盖了父类的复盖了父类的draw()draw()方法方法 System.out.System.out.printlnprintln(MapPointMapPoint:a map color point.:a map colo
17、r point.););public classpublic class SuperSub SuperSub public static void main(String public static void main(String args args)Point.draw();Point.draw();ColorPoint ColorPoint.draw();.draw();MapPoint.draw();MapPoint.draw();此程序运行后将输出如下结果:此程序运行后将输出如下结果:Point:a point.ColorPoint:a color point.MapPoint:a
18、map color point.5.3.4 null、this、super JavaJava语言规范中,每个类均有这样语言规范中,每个类均有这样3 3个对象:个对象:nullnull、thisthis、supersuper nullnull “空空”变量,表示这个对象不存在相应的实例变量,表示这个对象不存在相应的实例 例如:例如:Rectangle Rectangle rectrect=nullnull;当一个对象不再有用时,应当清除它以释放所占用的内存空间,这当一个对象不再有用时,应当清除它以释放所占用的内存空间,这只要赋予它只要赋予它nullnull即可。即如:即可。即如:rectrect
19、=nullnull;this 代表对象本身代表对象本身 在类的方法中,如果要引用的变量名或方法名的成员变量名或成员在类的方法中,如果要引用的变量名或方法名的成员变量名或成员方法名相同,则可通过使用方法名相同,则可通过使用this 来代表对象本身,即引用对象自身。来代表对象本身,即引用对象自身。super 代表代表父类父类 当子类中有与当子类中有与父类同名的父类同名的变量或方法时,可加上变量或方法时,可加上super限定词来指明限定词来指明是是对父类的变量或方法的引用。对父类的变量或方法的引用。下面是下面是this和和super是是使用的例子。使用的例子。class class Rectangl
20、eRectangle intint width,length;width,length;Rectangle(Rectangle(intint width,width,intint length)length)/构造方法构造方法 this.width=width;this.width=width;/thisthis代表所创建的对象代表所创建的对象 this.length=length;this.length=length;public void public void drawRect drawRect()()System.out.System.out.printlnprintln(this i
21、s Rectangle!);(this is Rectangle!);例例5-45-4 用用thisthis表示引用自身表示引用自身 上面这个例子中,用上面这个例子中,用thisthis表示引用对象本身。表示引用对象本身。在构造方法中,可以使用在构造方法中,可以使用supersuper来引用父类的构造方法。来引用父类的构造方法。例例5-55-5 用用supersuper引用引用父类的构造方法父类的构造方法 classclass fillRectanglefillRectangle extends Rectangle extends Rectanglepublicpublic fillRecta
22、ngle fillRectangle(intint w,w,intint num)num)/构造方法构造方法 super(w,num);super(w,num);/调用父类的构造方法调用父类的构造方法 private Stringprivate String makeString makeString(char(char ch ch,intint num)num)StringBuffer str StringBuffer str=new=new StringBuffer StringBuffer();();for(for(intint i=num;i0;i-)i=num;i0;i-)str s
23、tr.append(.append(chch););return return str str.toStringtoString();();在在这个类的构造方法中并没有写新的程序,而是调用了父类的构造函数,这个类的构造方法中并没有写新的程序,而是调用了父类的构造函数,用于初始化实例变量。用于初始化实例变量。public voidpublic void drawRect drawRect()()for(for(intint i=length;i0;i-)i=length;i0;i-)/用字符用字符“#”#”绘制绘制(填满填满)一个矩形一个矩形 System.out.System.out.prin
24、glnpringln(makeStringmakeString(#,width);(#,width);例例.5-6.5-6 用用 super super 指明引用父类的变量指明引用父类的变量class class A A String String str str=aaaaaaaaaa;class class B B extends A extends A String String str str=bbbbbbbbbb;void f()void f()System.out.System.out.printlnprintln(父类变量父类变量strstr:+super.+super.strst
25、r););System.out.System.out.printlnprintln(子类变量子类变量strstr:+strstr););public static void main(String public static void main(String args args)B b1=new B();B b1=new B();b1.f();b1.f();例例.5-7.5-7 对象变量、静态变量的继承。对象变量、静态变量的继承。class class A A static int a;int b;static int a;int b;classclass B B extends A exte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 编程 进阶
限制150内