分享
 
 
 

Java how to program(Third Edition)——我的java手记(四)

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

第九章 面向对象的编程

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成员。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有