java面向对象编程进阶

上传人:shaoy****1971 文档编号:114325386 上传时间:2019-11-10 格式:PPT 页数:42 大小:442KB
返回 下载 相关 举报
java面向对象编程进阶_第1页
第1页 / 共42页
java面向对象编程进阶_第2页
第2页 / 共42页
java面向对象编程进阶_第3页
第3页 / 共42页
java面向对象编程进阶_第4页
第4页 / 共42页
java面向对象编程进阶_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《java面向对象编程进阶》由会员分享,可在线阅读,更多相关《java面向对象编程进阶(42页珍藏版)》请在金锄头文库上搜索。

1、第5章 Java面向对象编程进阶,5.1 内部类和匿名类 (略) 5.2 抽象类 5.3 继承 5.4 包 5.5 接口,abstract class Shape / 说明一般二维图形抽象类 abstract double area(); /计算图形面积的方法 abstract void draw(); /绘制图形的方法 ,有时,由于对象高级抽象的需要,希望类只需要说明方法首部,而不需要或不可能说明其方法体,其方法体只能由其子类来完成,这样的类需要使用abstract关键字修饰,这种类被称为抽象类。 抽象类不能创建任何对象,抽象类只是用来由其子类继承。继承抽象类的子类比它的父类更加具体化、特殊

2、化。 例5-1 抽象类Shape,5.2 抽象类,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.1 继承概述 5.3.2 继承语法格式 5.3.3 子类对父类成员重载 5.3.4 null, this, super 5.3.5

3、多态性 5.3.6 final类 (最终类),在Java编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。 如果在声明类A时,指明类A继承了类B(类B是一个已定义了的类),则类A通常就拥有了类B的成员变量和方法。此时,类B称为类A的父类(superclass),父类也称为超类或基类;类A称为类B的子类(subclass),子类也称为派生类。Object类是Java中所有类的父类,也就是说Java中的类直接或间接有Object类派生而来。 Java中实行单继承,即一个类只能有一个父类。,5.3.1 继承概述,一个类只可

4、继承一个父类,但一个类可以有被多个子类继承。因而类之间的关系就形成了所谓的树形层次结构: ,类A,类C1n,类C11,类Bm,类B2,类B1,类Cm1,类Cmn,在Java中,java.lang.Object类是Java所有类的父类。,类继承语法形式如下: 修饰符 class SubClassName extends SupperClassName extends是继承关键词。SubClassName是新的子类名,SupperClassName是继承的父类名。父类名是必需的,而且只能有一个,因为Java中实行单继承。父类名所指定的类必须是在当前编译单元中可以访问的类,否则会产生编译错误。,5.

5、3.2 继承语法格式,子类的特性: 子类拥有其父类的所有属性和方法。但父类中说明为private的属性和方法,子类不可直接访问。 子类可以对父类的方法覆盖或重载。,例. 5-2子类与父类,class A private int a; protected int b; public int c; public void setA(int aa) a=aa; public int getA() return a; class B extends A int d; public static void main(String args) B b1= new B(); b1.setA(10); b1.

6、b = 20; b1.c= 30; b1.d = b1.getA() + b1.b + b1.c; System.out.print(b1.d); ,子类可以对父类的方法覆盖或重载。 方法覆盖: 子类的方法首部与父类的方法首部相同,但是子类重新实现了该方法。 方法重载: Java中方法可重载, 就是方法名相同但形参列表不同之方法。 子类的方法对父类的方法也可重载。,5.3.3 子类对父类成员重载,如果子类声明了一个与父类的成员变量同名的成员变量,则称父类的该成员变量被隐藏(Hiding),如果子类声明了一个与父类的成员方法同名的成员方法,则称父类的该成员方法被重写(Overriding)。关键

7、字this和super分别用来指明子类和父类中同名的成员变量和方法。当父类的成员变量、子类的成员变量和类的对象方法使用的局部变量三者同名,或其中两个同名时,可以使用关键字this和super来指定所要使用的变量。 继承是面向对象编程的主要优点之一,它对如何设计Java类有着直接的影响。继承有如下几点好处:,(1)它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其它的类有什么不同即可,而且还可以动态访问其它有关的类中的信息。 (2)通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现。 (3)当设计很大的程序时,继承可以使程序组织得更加层次清晰,有利于程序设

8、计和减少错误的发生。,例5-3 子类与父类的继承关系,public class Point /定义Point类 int x; int y;,public Point() /构造方法, 构造原点(0,0) x=0; y=0; public Point (int X, int Y) /构造方法,按给定的X、Y 值 x=X ; y=Y; /构成一个点(X,Y) public double distance() /定义方法,求点到坐标原点的距离 return Math.sqrt(x*x+y*y); /调用Math类的方法sqrt() public static void draw() /类方法draw

9、(),画点 System.out.println(“Point: a point. “); ,class ColorPoint extends Point int color; public static void draw() /复盖了父类的draw()方法 System.out.println(“ColorPoint: a color point.”); class MapPoint extends ColorPoint /定义类, 继承ColorPoint类 /类Object、Point均是MapPoint的父类,但都不是直接父类 String name; /地图上的点有自己的名字,如城

10、市名 public static void draw() /复盖了父类的draw()方法 System.out.println(“MapPoint: a map color point. “) ; ,public class SuperSub public static void main(String args) Point.draw(); ColorPoint.draw(); MapPoint.draw(); ,此程序运行后将输出如下结果: Point: a point. ColorPoint: a color point. MapPoint: a map color point.,5.3

11、.4 null、this、super,Java语言规范中,每个类均有这样3个对象: null、this、super null “空”变量,表示这个对象不存在相应的实例 例如: Rectangle rect=null; 当一个对象不再有用时,应当清除它以释放所占用的内存空间,这只要赋予它null即可。即如: rect=null;,this 代表对象本身 在类的方法中,如果要引用的变量名或方法名的成员变量名或成员方法名相同,则可通过使用this 来代表对象本身,即引用对象自身。 super 代表父类 当子类中有与父类同名的变量或方法时,可加上super限定词来指明是对父类的变量或方法的引用。 下面

12、是this和super是使用的例子。,class Rectangle int width,length; Rectangle(int width,int length) /构造方法 this.width=width; /this代表所创建的对象 this.length=length; public void drawRect() System.out.println(“this is Rectangle!“); ,例5-4 用this表示引用自身,上面这个例子中,用this表示引用对象本身。,在构造方法中,可以使用super来引用父类的构造方法。 例5-5 用super引用父类的构造方法,cl

13、ass fillRectangle extends Rectangle public fillRectangle(int w,int num) /构造方法 super(w, num); /调用父类的构造方法 private String makeString(char ch,int num) StringBuffer str=new StringBuffer(); for(int i=num;i0;i-) str.append(ch); return str.toString(); ,在这个类的构造方法中并没有写新的程序,而是调用了父类的构造函数,用于初始化实例变量。,public void

14、drawRect() for(int i=length;i0;i-) /用字符“#”绘制(填满)一个矩形 System.out.pringln(makeString(#,width); ,例.5-6 用 super 指明引用父类的变量,class A String str=“aaaaa“; class B extends A String str=“bbbbb“; void f() System.out.println(“父类变量str:“+super.str); System.out.println(“子类变量str:“+str); public static void main(Strin

15、g args) B b1 = new B(); b1.f(); ,例.5-7 对象变量、静态变量的继承。,class A static int a; int b; class B extends A public static void main(String args) A.a=10; B.a=20; System.out.println(“A.a=“+A.a+“, B.a=“+B.a); A a1 = new A(); B b1 = new B(), b2 = new B(); a1.b=3; b1.b=4; b2.b=5; System.out.println(a1.b); System.out.println(b1.b); System.out.println(b2.b); ,final修饰符可以定义一个不能被继承的类,即不能再有子类。java.lang.System类就是final

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号