答案:第九章 面向对象的编程
1.java不支持多重继承(像在C++语言中那样),但它支持“接口”概念。接口使java获得了多重继承的许多优点,屏弃了相应的缺点。2.子类可以访问其超类的public,protected和超类的包访问成员(即无权限修饰符的成员,且和它的超类在同一个包中),如果超类不允许通过继承的方式产生的子类访问它的某些成员,那么它必须以private方式声明该成员。超类的public,protected成员将成为子类的public,protected成员。子类不能继承超类的构造函数但子类的构造函数可以通过super引用来调用超类的构造函数。3.对访问protected成员的保护限制介于对访问public成员的保护限制和对访问private成员的保护限制之间。只有超类的方法、子类的方法以及同一个包内的其他类的方法,才能访问超类的protected成员(protected成员可以进行包访问)。4.实例分析1)源代码//超类Point2的定义point2.javapackage 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);}//constructorpublic 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.javapackage Point;public class Circle2 extends Point2{protected double radius;//no-argument constructorpublic Circle2() {setRadius(0);}//constructorpublic 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.javapackage 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";}elseoutput+="\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.一个接口的定义由关键字inte易做图ce开始,并包括一套public abstract方法。接口也可以包含public final static数据。为使用接口;一个类必须声明它implement接口,而且必须定义接口中的每个方法,参数个数及返回类型还要与接口中定义的相同。10.java提供了一种称为内部类的机制,使类可以在其他类中定义,这样的类可以是完整的类定义或者是“无名内部类”定义。内部类主要用于GUI事件处理。11.内部类定义要点1)含内部类的类在编译时将为每个内部类生成一个独立的.class文件。有名字的内部类的文件名为“外部类名$内部类名.class”;无名内部类的文件名为“外部类名$#.class”,其中,#时编译器给上一个:Java how to program(Third Edition)——我的java手记(五)
下一个:Java how to program(Third Edition)——我的java手记(三)
- 更多JSP疑问解答:
- jsp新手求指导,不要笑!
- 如何让一个form提取的值传递给多个jsp?
- DW中,新建的html页面能否有jsp或php代码?
- jsp 如何限制表单,实现只能填写特定的数据。
- jsp 和javabean结合的程序有问题
- 从数据库里取出的数据如何传递到另外的jsp页面中
- 你好,ext嵌入那个jsp页面,是不是还需要加上一些插件啊,不太懂,麻烦你了。
- JSP不能处理所有问题吗?还要来一大堆的TLD,TAG,XML。为JSP 非要 Servlet 不可吗?
- 光标离开时全角转半角在jsp中怎么实现
- jsp 页面 打开 pdf 文件 控制大小 和 工具栏 能发份源码么 谢啦
- jsp页面点保存按钮,运行缓慢,弹出对话框提示
- jsp刷新页面如何不闪屏
- jsp 与html 的交互问题?
- jsp小数显示问题 例如 我在oracle 数据库中查询出来的是 0.01 但是在jsp页面上就显示成 .01 没有前面的0
- jsp中日历控件