Java面向对象程序设计 教程课后答案(5)

2021-09-24 14:49

通过继承,子类自动拥有父类的所有成员,包括成员变量和成员方法(不包括构造方法)。子类可以更改父类成员,还可以增加自己的成员,但是,不能删除父类的成员。 在Java中以“单重继承+接口”的方式代替多重继承,不允许一个类有多个父类。 3-11 子类能够访问父类中什么样权限的成员?

【答】虽然子类继承了父类的成员变量和成员方法,但并不是对所有的成员都有访问权限。访问权限说明如下:

(1)子类对父类的私有成员(private)没有访问权限。

(2)子类对父类的公有成员(public)和保护成员(protected)具有访问权限。

(3)子类对父类中缺省权限成员访问权限分为两种情况,对同一包中父类的缺省权限成员具有访问权限,而对不同包中父类的缺省权限成员没有访问权限。

3-12 如果子类声明的成员与父类成员同名会怎么样?

【答】如果子类重定义父类的同名成员变量,则子类隐藏了父类成员变量。如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表完全相同时,则称子类成员方法覆盖了成员方法。如果子类重定义父类的同名成员方法,当子类方法的参数列表与父类方法的参数列表不同时,子类继承了父类的成员方法,并重载了继承来的该成员方法。 3-13 super引用有什么作用?super引用有几种使用方法?

【答】当子类重定义了父类成员时,则存在同名成员问题。此时,在子类方法体中,成员均默认为子类成员。如果需要引用父类同名成员,则需要使用supper引用。在以下两种同名成员情况下,需要使用supper引用。

(1)子类隐藏父类成员时,如需要访问父类同名成员变量时,需要使用supper指代父类的同名成员变量。语法如下:

super.成员变量

(2)子类覆盖父类成员时,如需要访问父类同名成员方法时,需要使用supper指代父类的同名成员方法。语法如下:

super.成员方法([参数列表]) 注意:super引用不能像this引用一样单独使用。

3-14 什么是多态性?什么是方法的重载?方法的重载和覆盖有何区别?

【答】在面向对象语言中,多态是指一个方法可以有多种实现版本,类的多态性表现为方法的多态性。重载是指同一个类中的多个方法可以同名但参数列表必须不同。重载表现为同一个类中方法的多态性。覆盖是指子类重定义了父类中的同名方法。覆盖表现为父类与子类之间方法的多态性。

3-15 什么是运行时多态?方法的重载和覆盖分别是什么时的多态性?

【答】如果在编译时不能确定、只有在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态。方法的重载都是编译时多态。方法的覆盖变现出两种多态性,当对象获得本类的实例时,为编译时多态,否则为运行时多态。

3-16 什么是抽象类?在什么情况下需要设计抽象类?抽象类中是否必须有抽象方法?

【答】使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法为抽象方法。抽象类中可以不包含抽象方法,但包含抽象方法的类必须被声明为抽象类。 3-17 什么是最终类?在什么情况下需要设计最终类?最终类中是否必须有最终方法?

【答】使用关键字final声明的类称为最终类,最终类不能被继承。使用final声明的成员方法称为最终方法,最终方法不能被子类覆盖。最终类中包含的都是最终方法,非最终类也可以包含最终方法。

3-18 将辗转相除法求两个整数的最大公因数gcd(a,b)用递归方法实现,辗转相除法题意见例

2.11,再设计下列方法:

(1)求两个整数a﹑ b的最小公倍数;

(2)求三个整数a﹑b﹑c的最大公约数。

〖解答〗程序如下。

public class GCD_recursion

{ public static int gcd(int a,int b) //返回a,b的最大公因数

{ if (b==0)

return a;

if (a<0)

return gcd(-a,b);

if (b<0)

return gcd(a,-b);

return gcd(b, a%b);

} public static int gcd(int a,int b,int c) //返回a,b,c的最大公因数

{ return gcd(gcd(a,b),c); }

public static int multiple(int a,int b) //返回a,b的最小公倍数

{ return a*b/gcd(a,b); }

public static void main(String args[])

{ int a=12,b=18,c=27;

System.out.println("gcd("+a+","+b+")="+gcd(a,b));

System.out.println("gcd("+(-a)+","+b+")="+gcd(-a,b));

System.out.println("gcd("+a+","+b+","+c+")="+gcd(a,b,c));

System.out.println("multiple("+a+","+b+")="+multiple(a,b));

}}

程序运行结果如下:

gcd(12,18)=6

gcd(-12,18)=6

gcd(12,18,27)=3 multiple(12,18)=36

3-19 用递归方法求 n个数的无重复全排列。

public class Permutation

{ private int[] table;

public Permutation(int n)

{ if (n>0)

{ table = new int[n];

for (int i=0;i<n;i++)

table[i] = i+1;

permute(n);

}

else

table = null;

}

private void output()

{ for (int i=0;i<table.length;i++)

System.out.print(" "+table[i]);

System.out.println();

}

private void swap(int i,int j) //交换数组两个元素值

{ if (table!=null && i>=0 && i<table.length && j>=0 && j<table.length)

{ int temp = table[i];

table[i] = table[j];

table[j] = temp;

} }

private void permute(int n)

全排列

{ if (n==1)

this.output();

else

{ permute(n-1);

for (int j=0;j<n-1;j++)

{ swap(n-1,j);

permute(n-1);

swap(n-1,j); }

} }

//构造方法 //输出数组元素 //用递归方法求n个数的无重复

public static void main(String args[])

{ new Permutation(3); }}

程序运行结果如下:

1 2 3

2 1 3

Java面向对象程序设计 教程课后答案(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:企业法 名词解释 简答

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: