院校资料Java面向对象编程进阶.ppt
《院校资料Java面向对象编程进阶.ppt》由会员分享,可在线阅读,更多相关《院校资料Java面向对象编程进阶.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、院校资料院校资料Java面向对面向对象编程进阶象编程进阶12021/2/23 在在Java编程语言中,通过继承可利用已有的类,并扩展它的属性编程语言中,通过继承可利用已有的类,并扩展它的属性和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程和方法。这个已有的类可以是语言本身提供的、其他程序员编写的或程序员原来编写的。序员原来编写的。假如在声明类假如在声明类A时,指明类时,指明类A继承了类继承了类B类类B是一个已定义了的类是一个已定义了的类,那么类,那么类A通常就拥有了类通常就拥有了类B的成员变量和方法。此时,类的成员变量和方法。此时,类B称为类称为类A的父类的父类superclas
2、s,父类也称为超类或基类;类父类也称为超类或基类;类A称为类称为类B的子类的子类subclass,子类也称为派生类。,子类也称为派生类。Object类是类是Java中所有类的父类,也中所有类的父类,也就是说就是说Java中的类直接或间接有中的类直接或间接有Object类派生而来。类派生而来。Java中实行单继承,即一个类只能有一个父类。中实行单继承,即一个类只能有一个父类。5.3.1 继承概述继承概述 一个类只可继承一个父类,但一个类可以有被多个子类一个类只可继承一个父类,但一个类可以有被多个子类继承。因此类之间的关系就形成了所谓的树形层次构造:继承。因此类之间的关系就形成了所谓的树形层次构造
3、:类类A类类C1n类类C11类类Bm类类B2类类B1类类Cm1类类Cmn在在JavaJava中,类是中,类是JavaJava所有类的父类。所有类的父类。类继承语法形式如下:类继承语法形式如下:修饰符修饰符 class SubClassName extends SupperClassName extends是继承关键词。是继承关键词。SubClassName是新的子类名,是新的子类名,SupperClassName是继承的父类名。父类名是必需的,而且是继承的父类名。父类名是必需的,而且只能有一个,因为只能有一个,因为Java中实行单继承。父类名所指定的类必中实行单继承。父类名所指定的类必须是在当
4、前编译单元中可以访问的类,否那么会产生编译错须是在当前编译单元中可以访问的类,否那么会产生编译错误。误。5.3.2 继承语法格式继承语法格式 子类的特性子类的特性:子类拥有其父类的所有属性和方法。但父类中说明为子类拥有其父类的所有属性和方法。但父类中说明为private的属性和方法,子类不可直接访问。的属性和方法,子类不可直接访问。子类可以对父类的方法覆盖或重载。子类可以对父类的方法覆盖或重载。例例.5-2子类与父类子类与父类 class class A A private int a;private int a;protected int b;protected int b;public i
5、nt c;public int c;public void setA(int aa)a=aa;public void setA(int aa)a=aa;public int getA()return a;public int getA()return a;class class B B extends extends A A int d;int d;public static void main(String args)public static void main(String args)B b1=new B();B b1=new B();b1.setA(10);b1.b=20;b1.c=3
6、0;b1.setA(10);b1.b=20;b1.c=30;b1.d=b1.getA()+b1.b+b1.c;b1.d=b1.getA()+b1.b+b1.c;System.out.print(b1.d);System.out.print(b1.d);子类可以对父类的方法覆盖或重载。子类可以对父类的方法覆盖或重载。方法覆盖方法覆盖:子类的方法首部与父类的方法首部一样,但是子类重新实子类的方法首部与父类的方法首部一样,但是子类重新实现了该方法。现了该方法。方法重载方法重载:Java中方法可重载中方法可重载,就是方法名一样但形参列表不同之方就是方法名一样但形参列表不同之方法。法。子类的方法对父类的
7、方法也可重载。子类的方法对父类的方法也可重载。5.3.3 5.3.3 子类对父类成员重载子类对父类成员重载 假如子类声明了一个与父类的成员变量同名的成员变量,那么称父假如子类声明了一个与父类的成员变量同名的成员变量,那么称父类的该成员变量被隐藏类的该成员变量被隐藏Hiding,假如子类声明了一个与父类的成员,假如子类声明了一个与父类的成员方法同名的成员方法,那么称父类的该成员方法被重写方法同名的成员方法,那么称父类的该成员方法被重写Overriding。关键字关键字this和和super分别用来指明子类和父类中同名的成员变量和方法。分别用来指明子类和父类中同名的成员变量和方法。当父类的成员变量
8、、子类的成员变量和类的对象方法使用的部分变量三当父类的成员变量、子类的成员变量和类的对象方法使用的部分变量三者同名,或其中两个同名时,可以使用关键字者同名,或其中两个同名时,可以使用关键字this和和super来指定所要使来指定所要使用的变量。用的变量。继承是面向对象编程的主要优点之一,它对如何设计继承是面向对象编程的主要优点之一,它对如何设计Java类有着直类有着直接的影响。继承有如下几点好处:接的影响。继承有如下几点好处:1 1它可以利用已有的类来创立自己的类,只需要指出自己的类和已有的其它的类有它可以利用已有的类来创立自己的类,只需要指出自己的类和已有的其它的类有什么不同即可,而且还可以
9、动态访问其它有关的类中的信息。什么不同即可,而且还可以动态访问其它有关的类中的信息。2 2通过继承,可以利用通过继承,可以利用JavaJava类库所提供的丰富而有用的类,这些类都已经被很好地类库所提供的丰富而有用的类,这些类都已经被很好地实现。实现。3 3当设计很大的程序时,继承可以使程序组织得更加层次明晰,有利于程序设计和当设计很大的程序时,继承可以使程序组织得更加层次明晰,有利于程序设计和减少错误的发生。减少错误的发生。例例5-3 5-3 子类与父类的继承关系子类与父类的继承关系 public class Point /定义定义Point类类 int x;int y;public Poin
10、t()/public Point()/构造方法构造方法,构造原点构造原点(0,0)(0,0)x=0;y=0;x=0;y=0;public Point(int X,int Y)/public Point(int X,int Y)/构造方法构造方法,按按给给定的定的X X、Y Y 值值 x=X;y=Y;/x=X;y=Y;/构成一个点构成一个点 X,YX,Y public double distance()/public double distance()/定定义义方法方法,求点到坐求点到坐标标原点的原点的间间隔隔 return Math.sqrt(x*x+y*y);/return Math.sqr
11、t(x*x+y*y);/调调用用MathMath类类的方法的方法sqrt()sqrt()public static void draw()/public static void draw()/类类方法方法draw(),draw(),画点画点 System.out.println(Point:a point.);System.out.println(Point:a point.);class ColorPoint extends Point class ColorPoint extends Point int color;int color;public static void draw()/p
12、ublic static void draw()/复盖了父复盖了父类类的的draw()draw()方法方法 System.out.println(“ColorPoint:a color point.System.out.println(“ColorPoint:a color point.););class MapPoint extends ColorPoint/class MapPoint extends ColorPoint/定定义类义类,继继承承ColorPointColorPoint类类 /类类ObjectObject、PointPoint均是均是MapPointMapPoint的父的父
13、类类,但都不是直但都不是直接父接父类类String name;/String name;/地地图图上的点有自己的名字,如城市名上的点有自己的名字,如城市名 public static void draw()/public static void draw()/复盖了父复盖了父类类的的draw()draw()方法方法 System.out.println(MapPoint:a map color point.);System.out.println(MapPoint:a map color point.);public class SuperSubpublic class SuperSub pu
14、blic static void main(String args)public static void main(String args)Point.draw();Point.draw();ColorPoint.draw();ColorPoint.draw();MapPoint.draw();MapPoint.draw();此程序运行后将输出如下结果:此程序运行后将输出如下结果:Point:a point.ColorPoint:a color point.MapPoint:a map color point.5.3.4 null、this、super Java Java语语言言标标准中,每个
15、准中,每个类类均有均有这样这样3 3个个对对象:象:null null、thisthis、supersuper null “null “空空变变量,表示量,表示这这个个对对象不存在相象不存在相应应的的实实例例 例如:例如:Rectangle rect=null;Rectangle rect=null;当一个当一个对对象不再有用象不再有用时时,应应当去除它以当去除它以释释放所占用的内存空放所占用的内存空间间,这这只要只要赋赋予它予它nullnull即可。即如:即可。即如:rect=null;rect=null;this 代表对象本身代表对象本身 在类的方法中,假如要引用的变量名或方法在类的方法中
16、,假如要引用的变量名或方法名的成员变量名或成员方法名一样,那么可通名的成员变量名或成员方法名一样,那么可通过使用过使用this 来代表对象本身,即引用对象自身。来代表对象本身,即引用对象自身。super 代表父类代表父类 当子类中有与父类同名的变量或方法时,可当子类中有与父类同名的变量或方法时,可加上加上super限定词来指明是对父类的变量或方法限定词来指明是对父类的变量或方法的引用。的引用。下面是下面是this和和super是使用的例子。是使用的例子。class Rectangleclass Rectangle int width,length;int width,length;Rectan
17、gle(int width,int length)/Rectangle(int width,int length)/构造方法构造方法 this.width=width;/this this.width=width;/this代表所代表所创创立的立的对对象象 this.length=length;this.length=length;public void drawRect()public void drawRect()System.out.println(this is Rectangle!);System.out.println(this is Rectangle!);例例5-4 5-4 用
18、用thisthis表示引用自身表示引用自身 上面这个例子中,用上面这个例子中,用thisthis表示引用对象本身。表示引用对象本身。在构造方法中,可以使用在构造方法中,可以使用supersuper来引用父类的构造方法。来引用父类的构造方法。例例5-5 5-5 用用supersuper引用父类的构造方法引用父类的构造方法 class class fillRectanglefillRectangle extends Rectangle extends Rectanglepublic fillRectangle(int w,int num)public fillRectangle(int w,int
19、 num)/构造方法构造方法 super(w,num);super(w,num);/调用父用父类的构造方法的构造方法 private String makeString(char ch,int num)private String makeString(char ch,int num)StringBuffer str=new StringBuffer();StringBuffer str=new StringBuffer();for(int i=num;i0;i-)for(int i=num;i0;i-)str.append(ch);str.append(ch);return str.toSt
20、ring();return str.toString();在在这个个类的构造方法中并没有写新的程序,而是的构造方法中并没有写新的程序,而是调用了父用了父类的构造函数,的构造函数,用于初始化用于初始化实例例变量。量。public void drawRect()public void drawRect()for(int i=length;i0;i-)/for(int i=length;i0;i-)/用字符用字符“#“#绘绘制制(填填满满)一个矩形一个矩形 System.out.pringln(makeString(#,width);System.out.pringln(makeString(#,w
21、idth);例例.5-6.5-6 用用 super super 指明引用父类的变量指明引用父类的变量class class A A String str=aaaaa;String str=aaaaa;class class B B extends A extends A String str=bbbbb;String str=bbbbb;void f()void f()System.out.println(System.out.println(父父类变量量strstr:+super.str);+super.str);System.out.println(System.out.println(子
22、子类变量量strstr:+str);+str);public static void main(String args)public static void main(String 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 extends Apublic static void main(String args)pub
23、lic static void main(String args)A.a=10;B.a=20;A.a=10;B.a=20;System.out.println(A.a=+A.a+,B.a=+B.a);System.out.println(A.a=+A.a+,B.a=+B.a);A a1=new A();A a1=new A();B b1=new B(),b2=new B();B b1=new B(),b2=new B();a1.b=3;b1.b=4;b2.b=5;a1.b=3;b1.b=4;b2.b=5;System.out.println(a1.b);System.out.println(a
24、1.b);System.out.println(b1.b);System.out.println(b1.b);System.out.println(b2.b);System.out.println(b2.b);final final修饰符可以定义一个不能被继承的类,即不能再有子类。修饰符可以定义一个不能被继承的类,即不能再有子类。java.lang.Systemjava.lang.System类就是类就是finalfinal类的一个例子,它是最终的类。类的一个例子,它是最终的类。final final修饰符通修饰符通常是出于平安的目的而使用的,因为不能继承常是出于平安的目的而使用的,因为不能继
25、承finalfinal类,人们就不能重载或覆盖类,人们就不能重载或覆盖它的任何方法。假如允许一个类被继承,其被重载或覆盖的方法可能会被改写。它的任何方法。假如允许一个类被继承,其被重载或覆盖的方法可能会被改写。保证某个特定的方法在类层次关系上的某层以后只有一个定义,这对于那些平保证某个特定的方法在类层次关系上的某层以后只有一个定义,这对于那些平安性非常关键的类是非常必要的。安性非常关键的类是非常必要的。无论是用于修饰变量、方法还是类,无论是用于修饰变量、方法还是类,finalfinal关键字的目的都是一样的:增强代关键字的目的都是一样的:增强代码的平安性。码的平安性。例例4.8 final4.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 院校 资料 Java 面向 对象 编程 进阶
限制150内