java练习题V1 下载本文

8、编译并运行下面的程序,观察分析运行结果,体会程序中super和this的用法,进一步理解变量隐藏和方法重写的概念。

package test1;

class SuperClss //定义父类 {

int x;

SuperClss( ) //父类的构造方法 {

x=10; }

void doClss( ) {

System.out.println(\); } }

class SubClss extends SuperClss //定义子类 {

int x;

SubClss( ) //子类的构造方法 {

super( ) ; x =100; }

//调用父类的构造方法

void doClss( ) //重写父类的doClss方法 {

System.out.println(\); }

void doDemo( ) //演示super和this的方法 {

int x; x=1000;

super.doClss( ); //调用父类的doClss方法 doClss( ); //调用本类的doClss方法

System.out.println(\+super.x); //父类的x System.out.println(\+this.x); //本类的x System.out.println(\+x); //本方法的x } }

public class SuperDemo {

public static void main(String args[ ]) //主方法 {

SubClss s = new SubClss(); s.doDemo(); }

}运行结果: SuperClss.doClass() SubClss.doClss() super.x=10 this.x=100 x=1000

体会:此程序中定义了一个父类,子类SubClss继承了父类SuperClss,在主函数中定义SubClss类对象 s时(即执行语句:SubClss s = new SubClss();时 ),自动调用类SubClss的构造函数SubClss(),再此构造函数中先执行“super( ) ;”语句,这样就调用类SuperClss的构造方法SuperClss( ),因为super来指明超类中的方法。同样在子类方法doDemo( )中,执行语句“super.doClss( );”时,则调用父类的方法doClss( )。如不用super 来指定的话,,则调用的是子类的方法doClss( ),这里子类SubClss()的成员方法doClss( )重写了父类SuperClss( )的成员方法doClss( )。

语句 “System.out.println(\”中super调用的是父类SuperClss的变量x,而语句 “System.out.println(\”中this调用的子类SubClss的变量x, 关键字this和super分别用来指明子类和父类中同名的成员变量。这里父类SuperClss的成员变量x、子类SubClss的成员变量x和类方法doDemo( )中使用的局部变量x三者同名,则要使用关键字this和super来指定所要使用的变量。如不用则输出的类方法的局部变量,如语句“System.out.println(\”输出的就是类方法doDemo()的局部变量。这里子类SubClss()的成员变量x隐藏了父类SuperClss( )的成员变量x。

9、编译并运行下面的程序,分析运行结果,体会其中方法重载的用法,进一步理解方法重载的概念。

package test1; class Father {

void speak1() {

System.out.println(\我是方法\); }

void speak2(String s) {

System.out.println(\我是有参方法\); } }

public class OverLoadingDemo {

public static void main(String[] args) {

Father f=new Father(); f.speak1();

f.speak2(\); }

}

运行结果: I am Father! I like music.

第五章 习题及思考题

1、 什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来 什么好处?什么是单重继承?什么是多重继承? 答:

继承是面向对象程序设计中两个类之间的一种关系。当一个类获取另一个类中

所有非私有的数据和操作的定义作为它自己的部分或全部成分时,就称这两个类之间具 有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称 为子类。

面向对象程序设计中的继承,可使得程序结构更加清晰,降低了编码和维护的工作量。 如果一个类只能有一个父类,则这种继承关系称为单重继承;如果一个类可以有多个 父类,则这种继承关系称为多重继承。

2、 “子类的域和方法的数目一定大于等于父类的域和方法的数目”,这种说法是否 正确?为什么?

答: 这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能继承所 有非私有的域和方法。如果子类在继承之外自己定义的域和方法数目小于父类中私有成

员的数目,则子类的域和方法的数目小于父类的域和方法的数目。

3、什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?

答:子类重新定义父类中已经存在的方法,称为方法的覆盖。注意:方法覆盖与域的 隐藏不同。子类重新定义父类已有的域,并不能完全取代它从父类那里继承的同名的域, 这个域仍然占用子类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方法 时,从父类那里继承来的方法将被新方法完全取代,不再在子类的内存空间中占一席

之地。 与方法的覆盖不同,重载不是子类对父类同名方法的重新定义,而是在一个类中定义了同名的不同方法。

4、什么是多态?面向对象程序设计为什么要引人多态的特性?使用多态有什么优点?

答:一个类中存在多个同名的方法,称为多态。把抽象功能和目的相同,而具体实现 因不同情况而异的方法命名为同名方法,符合面向对象程序设计中抽象、提升概念,封装、 隐藏细节的特点,从而提高了程序的简洁性和可读性,降低了类和程序模块直接的相互耦 合和依赖。

5、父类对象与子类对象相互转化的条件是什么?如何实现它们的相互转化?

答:一个子类对象也可以被合法地视为一个父类的对象,即一个父类对象的引用,其 指向的内存单元可能实际上是一个子类的对象。在这种情况下,可以使用强制类型转换, 将父类对象的引用转换成实际的子类对象的引用

6、什么是包?它的作用是什么?

答:包是一种松散的类的集合。包的作用主要是把需要协同工作的不同的类组织在 一起,使得程序功能清楚、结构分明

7、 CLASSPATH是有关什么的环境变量?它如何影响程序的运行?如何设置 和修改这个环境变量?

答:CLASSPATH是指定缺省的包文件(字节码文件)路径的环境变量。如果

CLASSPATH设置得不正确,则程序编译、运行时可能找不到所需的类的字节码文件,从 而使程序无法正常运行。

使用如下命令设置或修改CLASSPATH: SET classpath=,;d:\\jdk1.6.0\\lib\\ext

8、 一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象 方法?

答:使用关键字implements可以定义类实现某接口。实现某接口的类如果不是抽