|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
第九章 面向对象的编程 1.java不支持多重继续(像在C++语言中那样),但它支持“接口”概念。接口使java获得了多重继续的许多长处,屏弃了相应的缺点。 2.子类可以访问其超类的public,protected和超类的包访问成员(即无权限修饰符的成员,且和它的超类在同一个包中),假如超类不答应通过继续的方法产生的子类访问它的某些成员,那么它必须以private方法声明该成员。超类的public,protected成员将成为子类的public,protected成员。子类不能继续超类的构造函数但子类的构造函数可以通过super引用来调用超类的构造函数。 3.对访问protected成员的保护限制介于对访问public成员的保护限制和对访问private成员的保护限制之间。只有超类的方式、子类的方式以及同一个包内的其他类的方式,才能访问超类的protected成员(protected成员可以进行包访问)。 4.实例分析 1)源代码 //超类Point2的定义point2.java package Point; public class Point2 { protected int x,y; //no-argument constructor,mast be included in the superclass,or will incur the compile error; public Point2() { setPoint(0,0); } //constructor public Point2(int a,int b) { setPoint(a,b);} public void setPoint(int a,int b) {x=a;y=b;} public int getX() {return x;} public int getY() {return y;} public String toString() {return \"[\"+x+\",\"+y+\"]\";} } //子类Circle2的定义;circle2.java package Point; public class Circle2 extends Point2{ protected double radius; //no-argument constructor public Circle2() { setRadius(0); } //constructor public Circle2(double r,int a,int b){ super(a,b); //explict call to superclass constructor; setRadius(r); } public void setRadius(double r) {radius=(r>=0.0?r:0.0);} public double getRadius(){return radius;} public double area(){return Math.PI *radius*radius;} public String toString() {return \"Center=\"+super.toString()+\";Radius=\"+radius;}//call to superclass toString; } //测试主程序;InheritanceTest2.java package Point; import java.text.DecimalFormat ; import javax.swing.JOptionPane ; public class InheritanceTest2{ public static void main(String arg[]){ Point2 pointRef,p; Circle2 circleRef,c; String output; p=new Point2(30,50); c=new Circle2(2.7,120,89); output=\"Point p:\"+p.toString ()+\"/nCircle:\"+c.toString (); pointRef=c; //assign circle to pointRef; output+=\"/n/nCircle c(via pointRef):\"+pointRef.toString (); /*Polymorphism and dynamic binding,so output the result using the funcion toString of Circle2 */ /*use downcasting(casting a superclass reference to a subclass data type)to assign pintRef to circleRef*/ circleRef=(Circle2)pointRef; output+=\"/n/nCircle c(via circleRef):\"+circleRef.toString (); DecimalFormat precision2=new DecimalFormat(\"0.00\"); output+=\"/nArea of c(via circleRef):\"+ precision2.format (circleRef.area ()); if(p instanceof Circle2){ //judge if the object p is a object of Circle2; circleRef=(Circle2)p; output+=\"/n/ncast successfull\"; } else output+=\"/n/np does not refer to a circle\"; JOptionPane.showMessageDialog (null,output, \"Demostrating the /\"is a/\" relationship\", JOptionPane.INFORMATION_MESSAGE ); System.exit(0); } } 2)程序运行结果: 5.假如在你的类的层次结构中定义了finalize方式,子类finalize方式应该调用超类的finalize方式(形式:super.finalize();),以保证一个对象所有部分都能正常的终止。 6.引用子类对象可以被隐式地转变为引用超类对象,因为根据继续,子类对象“是一个”超类对象。而用子类引用引向超类对象是语法错误。 7.可以用final来定义方式和类,声明为final的方式不能在子类中被覆盖,声明为static和private的方式是隐式的fianl,因为fianl方式的定义永远不能改变,编译器按这种方法优化程序,即在所有出现final方式调用的地方用方式定义的扩展代码替换方式调用的语句――这种技术叫内联代码(inlining the code)。 声明为final的类不能是超类,即final类不能被继续,一个final类中的所有方式都是隐式的final。 8.抽象类:一个永远也不需要实例化对象的类,它的作用是作为一个恰当的类,这样其他的类就可以继续接口或者实现。对象能被实例化的类叫详细类。抽象类用abstract声明。 9.一个接口的定义由要害字interface开始,并包括一套public abstract方式。接口也可以包含public final static数据。为使用接口;一个类必须声明它implement接口,而且必须定义接口中的每个方式,参数个数及返回类型还要与接口中定义的一样。 10.java提供了一种称为内部类的机制,使类可以在其他类中定义,这样的类可以是完整的类定义或者是“无名内部类”定义。内部类主要用于GUI事件处理。 11.内部类定义要点 1)含内部类的类在编译时将为每个内部类生成一个独立的.class文件。著名字的内部类的文件名为“外部类名$内部类名.class”;无名内部类的文件名为“外部类名$#.class”,其中,#时编译器给每个无名内部类的编号,从1开始,依次递增。 2)具有类名的内部类可以定义为public,protected,包访问或private,其使用限制和类的其他成员一样。 3)为了访问外部类的this引用,可使用“外部类名.this”。 4)外部类负责创建它的内部类的对象。为了创建另一个类的内部类的对象,首先创建这个外部类的一个对象,并把它赋值给一个引用(设为ref),然后可用下述形式的语句来创建内部类的对象: 外部类名.内部类名innerRef=ref.new内部类名(); 5)内部类可以声明为static。static内部类不要求定义一个外部类的对象(但是非static内部类却要求这样)。static内部类不能访问外部类的非static成员。 返回类别: 教程 上一教程: 获得本机IP和名称 下一教程: Java语言的接口与类型安全 您可以阅读与"Java how to program(Third Edition)??我的java手记(四)"相关的教程: · Java how to program(Third Edition)??我的java手记(五) · JAVA HOW TO PROGRAM(THIRD EDITION)-我的JAVA手记(三) · JAVA HOW TO PROGRAM(THIRD EDITION)-我的JAVA手记(二) · JAVA HOW TO PROGRAM(THIRD EDITION)-我的JAVA手记(五) · Java how to program(Third Edition)??我的java手记(三) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |