4、要求设计一个矩形类Rectangle,其中含有多个构造方法。利用这些构造方法实例化不同的对象,并输出相应的信息。
答:
import java.io.*;
class Rectangle //矩形类 {
private int width; //矩形的宽度
private int length; //矩形的长度
Rectangle() //矩形的不带参数的构造函数,缺省的给出长(30)和宽(20)
{
length=30;width=20; }
Rectangle(int l,int w) //矩形的带参数的构造函数 {
length=l;width=w; }
Rectangle(Rectangle r) //此构造方法以另一个Rectangle作为参数
{
width=r.width(); //通过对象调用函数并附值给相应变量
length=r.length();
}
int width() //返回宽度 {
return width; }
int length() //返回长度 {
return length; } }
public class CRctngle {
public static void main (String args[ ]) {
Rectangle x1=new Rectangle(); //声明类的对象并实例化
Rectangle x2=new Rectangle(50,40); //声明类的对象并初始化
Rectangle x3=new Rectangle(x1);
System.out.println(x1.length());
System.out.println(x1.width());
System.out.println(x2.length());
System.out.println(x2.width());
System.out.println(x3.length());
System.out.println(x3.width()); } }
运行结果:30 20 50 40 30 20
体会:此程序中共定义了3个构造方法:Rectangle()、Rectangle(int l,int w) 、Rectangle(Rectangle r) ,其中Rectangle()是没有参数的,Rectangle(int l,int w)以常数作为参数,Rectangle(Rectangle r)是以对象最为参数。构造函数调用时在用new运算符创建类对象是由系统自动完成的,构造函数的参数传递和形实结合也是由系统在调用的同时自动完成。
5、计算出Fibinacii 序列的前10项,Fibinacii 序列的前两项是1,后续每项的值都是该项的前两项之和。即
F(n)=F(n-1)+F(n-2)
F(1)=F(2)=1;
答:class Fibi
{ public long fibinacii(int n)
{ long c=0;
if(n==1||n==2)
c=1; else
c=fibinacii(n-1)+fibinacii(n-2);
return c; } }
public class Example4_5
{ public static void main(String args[])
{ Fibi a=new Fibi();
for(int i=1;i<=10;i++)
{ System.out.print(\ } }
第五章 习题及思考题
1、 什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来
什么好处?什么是单重继承?什么是多重继承?
解:继承是面向对象程序设计中两个类之间的一种关系。当一个类获取另一个类中
所有非私有的数据和操作的定义作为它自己的部分或全部成分时,就称这两个类之间具
有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数
据和操作的类称
为子类。
面向对象程序设计中的继承,可使得程序结构更加清晰,降低了编码和维护的工作量。
如果一个类只能有一个父类,则这种继承关系称为单重继承;如果一个类可以有多个
父类,则这种继承关系称为多重继承。
2、 “子类的域和方法的数目一定大于等于父类的域和方法的数目”,这种说法是否
正确?为什么?
解:这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能继承所
有非私有的域和方法。如果子类在继承之外自己定义的域和方法数目小于父类中私有成
员的数目,则子类的域和方法的数目小于父类的域和方法的数目。
3、什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?
解;子类重新定义父类中已经存在的方法,称为方法的覆盖。注意:方法覆盖与域的
隐藏不同。子类重新定义父类已有的域,并不能完全取代它从父类那里继承的同名的域,
这个域仍然占用子类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方法
时,从父类那里继承来的方法将被新方法完全取代,不再在子类的内存空间中占一席