第三章习题解答
3.1什么是面向对象技术?它有什么优点?
通过面向对象的方式,将现实世界的物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。程序设计者考虑的是对象的描述、对象间的关系、类的管理、什么时候和什么地方调用对象的哪一种方法。
面向对象技术的最大优点是有效支持重用,使得大的程序也变得相对容易维护。
3.2面积对象的程序设计和面向过程的程序设计有什么区别?
面向过程语言编程模式是: 程序=数据结构+算法
编程时需要考虑和内容是的程序什么、怎么做、重点考虑每个实现的细节。 面向对象的语言的编程模式是: 程序=对象+消息
程序设计者考虑的是对象的描述、对象间的关系、类的管理、什么时候和什么地方调用对象的哪一种方法。
3.3在程序中类和对象有什么区别?
类是同一种对象的描述,类概括了同类对象的共有性质:数据和方法。类的每个对象都有自己的标识,但它们具有相同的一级属性和提供相同的方法。
在程序中,对象的名称用于捐弃引用对象,对象的成员变量用于存储对象的状态值,对象和方法用于描述对象的行为。
3.4 类变量和实例变量,以及类方法和实例方法的区别。
加载类之前 创建对象之后 调用方法 访问权限 实例变量 不分配内存 成员变量 类变量 各个对象之间各对象名.实例变量被实例方法,构造方自分配独立的内名 法访问 存空间 各个对象之间共对象名.类变量直接分配内被实例方法,类方法,享这段已经分配名;类名.类变量存 构造方法访问 完的内存 名 不分配入口共享一个入口地对象名.实例方法实例变量、类变量,地址 址 名 实例方法、类方法 对象名.类方法直接分配入共享这个入口地名;类名.类方法类变量、类方法 口地址 址 名 实例方法 成员方法 类方法 3.5 子类能继承超类的哪些成员变量和方法?
私有(private) 友好(缺省默认) 受保护(protected) 共有(public) 同包继承 不继承 继承 继承 继承 不同包继承(import进来的) 不继承 不继承 继承 继承 3.6 子类在什么情况下能隐藏超类的成员变量和方法?
解:在子类重载父类的成员变量、方法的情况下。
3.7 在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?
解:不允许!方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。(与方法重载不同)
3.8试说出对象、类、继承和多态性的概念。
所有东西都是对象,现实世界中的对象都有状态、行为和名称。
类是同一种对象的描述,类概括了同类对象的共有性质:数据和方法。类的每个对象都有自己的标识,但它们具有相同的一级属性和提供相同的方法。
继承就是在已有类的基础上扩充属性,或扩充或者改写其某些方法,生成新的类。继承定义 的类称为子类,被继承的类称为超类。子类继承父类具有的属性和方法,还可增加某些特殊性,并可扩充和修改部分行为。继承具有传递性。
多态性指同样的消息被不同类型的对象接收时导致完全不同的行为。方法的重写、重载与动态联编构成多态性。
3.9为什么要定义抽象类?为什么抽象类没有具体的对象?
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的,即没有具体的对象的。
3.10试比较接口和抽象类的异同。使用接口有哪些注意事项?
相同点:两者定义的方法均是抽象方法,即没有实现的代码。 不同点:
(1)方法的实现者不同。抽象类的方法实现交给每一个子类去完成,而接口则是一些列没有实现代码的方法(即抽象方法)和常量的组合,方法的实现则要在实现这个接口的类中完成,但它不限定类如何实现这些方法。
(2)继承方式不同。接口使得类不必受限于单一继承的关系,接口本身可以继承多个父接口,而实现接口的类也可以继承一个类和实现多个接口。对有继承并实现接口的类来说,实际上实现了有控制的多继承,而抽象类的子类则不能实现多继承。
(3)实现某个接口的类必须实现该接口的所有方法,而抽象类的子类实现其超类的方法早则没有这种限制。
3.11指出Applet的程序结构及各方法的作用。
程序结构:
public class Applet程序名 extends java.applet.Applet{ public void init(){?} public void start(){?} public void stop(){?} public void destroy(){?}
public void paint(Graphic g){?} ? }
方法:
Java API 的 Applet 类为您提供设计 applet 程序外观并管理 其动作时所需要的支持。该类提供一种叫做 Panel(面板)的图形 用户界面(GUI)组件以及大量方法。其基本方法有:(P63-64)
init()方法、start()、stop()、destroy()、paint()、repaint()、update()
要创建一个 applet 程序,就需要扩展该 Applet 类(或创建子类)并实现您所需要的外观和动作。
3.12 以下程序有什么错误?
public class Takecare{ int a=90;
static float b=10.98f;
public static void main(String args[]){
float c=a+b;System.out.println(“=”+c); } }
解:类方法main()调用了类的实例变量,main方法是类方法,不能调用类的实例变量a,导致错误!
3.13 声明一个复数类Complex。要求该类提供:由已知实部和虚部构造复数的方法;复数与实数和复数与复数的四则运算方法;取复数对象的实部、虚部的方法;输出复数的方法。并要求编写一个应用程序实现对复数类的完整测试。
class Complex{ double a,b; Complex(){}
Complex(double a, double b) {
this.a=a;this.b=b; }
public String Print()//输出复数的字符串表示 {
String result= new String(this.a + (b>0?\:\) + (b!=0?this.b + \ :\));//
此处很有技巧:
//如果虚部b大于0,则输出格式为“a+bi”,如果虚部b小于0.则第一个条件表达式的值为空,输出格式为“abi”,而因b前有负号,故自动成为“a-bi”格式
//如果虚部b为0,则第一个和第二个条件表达式值均为空,输出格式为“a”。 return result; }
public Complex add(Complex val)//复数加法 {
Complex result = new Complex(); result.a = this.a + val.a; result.b = this.b + val.b; return result; }
public Complex subtract(Complex val)//复数减法 {
Complex result = new Complex(); result.a = this.a - val.a; result.b = this.b - val.b; return result; }
public Complex multiply(Complex val)//复数乘法 {
Complex result = new Complex();
result.a = this.a * val.a-this.b*val.b; result.b = this.a * val.b+this.b*val.a; return result; }
public Complex divide(Complex val)//复数除法 {
Complex result = new Complex();
result.a = (this.a * val.a+this.b*val.b)/(val.a*val.a+val.b*val.b); result.b = (this.b * val.a-this.a*val.b)/(val.a*val.a+val.b*val.b); return result; }
public double getReal()//取复数的实部 {
return this.a; }
public double getimage()//取复数的虚部 {
return this.b; } }
class TestComplex{
public static void main(String[] args) {
Complex complex1 = new Complex(2.0,4.0); Complex complex2 = new Complex(3.0,-1.0);
System.out.println(\复数1:\ + complex1.Print()+\其\+complex1.getReal()+\虚部:\+complex1.getimage());
System.out.println(\复数2:\ + complex2.Print()+\其\+complex2.getReal()+\虚部:\+complex2.getimage()); System.out.println(\复数1与复数2之\+complex1.add(complex2).Print()); System.out.println(\复数1与复数2之\+complex1.subtract(complex2).Print()); System.out.println(\复数1与复数2之\+complex1.multiply(complex2).Print());
System.out.println(\复数1除以复数2之\+complex1.divide(complex2).Print()); } }
运行结果:
实部:实部:和差积商
为为为为
3.14 声明一个有理数类RationalNum。要求提供有理数的四则运算,以分数形式输出有理数和以浮点数形式输出有理数等方法。
class RationalNumber {
int numerator;//分子 int denominator;//分母 public RationalNumber() {
numerator = Integer.MIN_VALUE;//即-2147483648 denominator = Integer.MIN_VALUE; }
public RationalNumber(int a, int b) throws Exception//构造方法 {
if (b == 0) {
throw new Exception(\发生分母为0的异常,分母不能为0\); } else {
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库自考教材《java语言程序设计(一)》第三章习题解答在线全文阅读。
相关推荐: