}
void speak(String s) //有参数的speak方法 {
System.out.println(″I like″+″″+s+″. ″); }
}
public class OverLoadingDemo {
public static void main (String args[ ]) {
Father x = new Father( );
x.speak(); //调用无参的speak方法 x.speak(″music″) //调用有参的speak方法 } }
运行结果: I am Father! I like music.
第五章 习题及思考题
1、 什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来 什么好处?什么是单重继承?什么是多重继承?
解:继承是面向对象程序设计中两个类之间的一种关系。当一个类获取另一个类中 所有非私有的数据和操作的定义作为它自己的部分或全部成分时,就称这两个类之间具 有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称 为子类。
面向对象程序设计中的继承,可使得程序结构更加清晰,降低了编码和维护的工作量。 如果一个类只能有一个父类,则这种继承关系称为单重继承;如果一个类可以有多个 父类,则这种继承关系称为多重继承。
2、 “子类的域和方法的数目一定大于等于父类的域和方法的数目”,这种说法是否 正确?为什么?
解:这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能继承所 有非私有的域和方法。如果子类在继承之外自己定义的域和方法数目小于父类中私有成 员的数目,则子类的域和方法的数目小于父类的域和方法的数目。
3、什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?
解;子类重新定义父类中已经存在的方法,称为方法的覆盖。注意:方法覆盖与域的 隐藏不同。子类重新定义父类已有的域,并不能完全取代它从父类那里继承的同名的域,
这个域仍然占用子类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方法 时,从父类那里继承来的方法将被新方法完全取代,不再在子类的内存空间中占一席
之地。 与方法的覆盖不同,重载不是子类对父类同名方法的重新定义,而是在一个类中定义了同名的不同方法。
4、 什么是多态?面向对象程序设计为什么要引人多态的特性?使用多态有什么优点?
解:一个类中存在多个同名的方法,称为多态。把抽象功能和目的相同,而具体实现 因不同情况而异的方法命名为同名方法,符合面向对象程序设计中抽象、提升概念,封装、 隐藏细节的特点,从而提高了程序的简洁性和可读性,降低了类和程序模块直接的相互耦 合和依赖。
5、 父类对象与子类对象相互转化的条件是什么?如何实现它们的相互转化?
解:一个子类对象也可以被合法地视为一个父类的对象,即一个父类对象的引用,其 指向的内存单元可能实际上是一个子类的对象。在这种情况下,可以使用强制类型转换, 将父类对象的引用转换成实际的子类对象的引用
6、什么是包?它的作用是什么?
解:包是一种松散的类的集合。包的作用主要是把需要协同工作的不同的类组织在 一起,使得程序功能清楚、结构分明。
7、 CLASSPATH是有关什么的环境变量?它如何影响程序的运行?如何设置 和修改这个环境变量?
解:CLASSPATH是指定缺省的包文件(字节码文件)路径的环境变量。如果
CLASSPATH设置得不正确,则程序编译、运行时可能找不到所需的类的字节码文件,从 而使程序无法正常运行。
使用如下命令设置或修改CLASSPATH: SET classpath=,;d:\\jdk1.5.0\\lib\\ext
8、 一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象 方法?
解:使用关键字implements可以定义类实现某接口。实现某接口的类如果不是抽 象类,则需要通过重载来实现该接口中的所有抽象方法;如果这个类是抽象类,则它可以 不必实现该接口中的所有抽象方法。
9、 为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A、B、C的表达式。现有两种工具:Car007 和Plane,其中Car007 的速度运算公式为:A*B/C,Plane 的速度运算公式为:A+B+C。需要编写三类:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别时整数A、B、C,举例如下:
计算Plane的时间:\ 计算Car007的时间:\ 如果第3种交通工具为Ship,则只需要编写Ship.java,运行时输入:\ComputeTime Ship 22 33 44\
提示:充分利用接口的概念,接口对象充当参数。
实例化一个对象的另外一种办法:Class.forName(str).newInstance();例如需要实
例化一个Plane对象的话,则只要调用Class.forName(\便可。 解:ComputerTime.java 源程序: import pkg1.pkg2.*; import java.lang.*;
public class ComputerTime
{ public static void main(String args[])
{ System.out.println(\交通工具: \ System.out.println(\参数A: \ System.out.println(\参数B: \ System.out.println(\参数C: \ double A=Double.parseDouble(args[1]); double B=Double.parseDouble(args[2]); double C=Double.parseDouble(args[3]); double v,t; try { Common d=(Common) Class.forName(\ v=d.runtimer(A,B,C); t=1000/v;
System.out.println(\平均速度: \ System.out.println(\运行时间:\小时\ }
catch(Exception e)
{ System.out.println(\ } } }
包pkg1中Car007.java的源程序: package pkg1;
import pkg1.pkg2.*;
public class Car007 implements Common
{ public double runtimer(double A,double B,double C) { System.out.println(\ return A*B/C; } }
包pkg1中Plane.java的源程序: package pkg1;
import pkg1.pkg2.*;
public class Plane implements Common {
public double runtimer(double A,double B,double C) {
return A+B+C; } }
包pkg2中Common.java的源程序: package pkg1.pkg2;
public interface Common
{ double runtimer(double A,double B,double C); }
10、编写求解几何图形(如直线、三角形,矩型,圆,多边型)的周长,面积的应用程序,要求用到继承和接口等技术。
解:// Solution of drawings as triangle,rectangle,circle
import java.io.*; // interface
interface getProperty {
double Pi=3.1415926; double getArea(); double getCircum(); String getName(); } //
class mpoint {
static int i=0; double x,y;
String strmpoint;
mpoint(double a,double b) {
this.x=a; this.y=b; }
double getX(){ return x; }
double getY() {
return y; }
String getString()
{
i+=1;
strmpoint=\ return strmpoint; } }
//disp class class disp { double area; double circum;
String drawingName;
disp(double a, double b, String ss){ this.area=a; this.circum=b;
this.drawingName=ss; }
public void display(){
System.out.println(\ System.out.println(\ } }
// class triangle
class triangle implements getProperty { mpoint p1,p2,p3; double s1,s2,s3;
String drawingName=\
triangle(mpoint p1,mpoint p2,mpoint p3){ this.p1=p1; this.p2=p2; this.p3=p3;
this.s1=Math.sqrt( (p1.x-p2.x)*(p1.x-p2.x)+ (p1.y-p2.y)*(p1.y-p2.y) ); this.s2=Math.sqrt( (p3.x-p2.x)*(p3.x-p2.x)+ (p3.y-p2.y)*(p3.y-p2.y) ); this.s3=Math.sqrt( (p1.x-p3.x)*(p1.x-p3.x)+ (p1.y-p3.y)*(p1.y-p3.y) ); }
public double getArea(){ double ss,ssa;
ss=(s1+s2+s3)*Pi/2.0/Pi;
ssa=Math.sqrt( ss*(ss-s1)*(ss-s2)*(ss-s3) ); return ssa; }
public double getCircum(){
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Java程序设计各章习题及其答案(4)在线全文阅读。
相关推荐: