java 语言程度设计 李元朝 第8章 接口和包 练习题
1.什么是抽象类?它的特点是什么?
抽象类是专门设计用来让子类继承的类。
特点:抽象类通常都包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须实现其父类定义的每个抽象方法,除
非该子类也是抽象类。
2.什么是接口?它的特点是什么?
接口:是由一些抽象方法和常量所组成的集合。
特点:
1.接口可以实现多继承。多继承可以通过在extends后面使用多个父接口来实现
2.接口不存在最高层,与类的最高层为object类是不同的
3.接口中的方法都是使用abstract修饰的方法。
4.接口中的成员变量默认为final定义的常量。
3.什么是包?包的作用是什么?
包是java语言提供的组织类和接口的工具,包是一组相关类和接口的集合。
包的作用:由于同一包中的类在缺省情况下可以相互访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包中。
由于java程序模块是动态装载,为了防止名字空间的冲突,java对其成员变量和方法采用类似于internet上的命名方式来定义。成
员变量和方法是类的重要成分,在类中定义,而每个类又都是包的一部分,这样就可以通过包名、类名和类成员这样的层次来定义
4.编写一个应用抽象类的程序。要求设计抽象类,设计继承抽象类并实现抽象类中抽象方法的子类。
定义抽象类bank,它包含oneyearRate(一年定期利率)、oneyearNationaldebt(一个国债利率)和interestRate(按年计算的活期
利率)常数,count()方法及show()方法。count()方法计算存款一个所得利息及缴利息税后的总金额(原存款额+税后利息)而
show()方法显示总额
由于定期存款、活期存款和国债的利率不同,此程序定义了3个类,分别表示这3种储蓄。3个类都继承抽象类Bank中的count()和
show()抽象方法,完成对利息和总金额的计算和显示功能。
abstract class Bank { protected static final float oneyearRate=0.0178f; //定期利率 protected static final float oneyearNationaldebt=0.0198f; //国债利率 protected static final float interestRate=0.0078f; //活期利率 abstract void count(); abstract void show(); }
class OneyearNationaldebtCalcute extends Bank {
private float saving;
private double sum;
OneyearNationaldebtCalcute(float i) { saving=i; count(); }
public void count()
{
sum=saving+(saving*Bank.oneyearNationaldebt);
}
public void show()
{
System.out.println(" With national debt rate, sum= "+sum);
}
}
class OneyearRateCalcute extends Bank {
private float saving; //原存款金额
private double sum; //1年后的总金额
OneyearRateCalcute(float i) { saving=i; count(); }
public void count() //实现count()方法
{
sum=saving+(saving*Bank.oneyearRate*0.8); //税后总金额
}
public void show() //实现show()方法
{
System.out.println(" With fixed rate, sum="+sum);
}
}
class InterestRateCalcute extends Bank {
private float saving;
private double sum;
InterestRateCalcute(float i) { saving=i;count(); }
public void count(){
sum=saving+(saving*Bank.interestRate*0.8); //税后总金额
}
public void show()
{
System.out.println(" With current interest rate, sum= "+sum);
}
}
class Calculate {
public static void main(String args[])
{
int mon=10000;
OneyearRateCalcute rate=new OneyearRateCalcute(mon);
rate.show();
OneyearNationaldebtCalcute debt=new OneyearNationaldebtCalcute(mon);
debt.show();
InterestRateCalcute interest=new InterestRateCalcute(mon);
interest.show();
}
}
5.将题4中的抽象类改为接口,实现相同的功能。
interface Bank {
float oneyearRate=0.0178f; //下面是不同的存款利率
float oneyearNationaldebt=0.0198f;
float interestRate=0.0078f;
abstract void count(); //抽象方法
abstract void show();
}
class InterestRateCalcute implements Bank{
private float saving; //原存款金额
private double sum; //1年后的税后总金额
InterestRateCalcute(float i) { saving=i;count(); }
public void count(){
sum=saving+(saving*Bank.interestRate*0.8); //税后总金额
}
public void show()
{
System.out.println(" With current interest rate, sum= "+sum);
}
}
class OneyearNationaldebtCalcute implements Bank{
private float saving; //原存款金额
private double sum; //1年后的总金额
OneyearNationaldebtCalcute(float i) { saving=i; count(); }
public void count()
{
sum=saving+(saving*Bank.oneyearNationaldebt); //总金额
}
public void show()
{
System.out.println(" With national debt rate, sum= "+sum);
}
}
class OneyearRateCalcute implements Bank{
private float saving; //原存款金额
private double sum; //1年后的税后总金额
OneyearRateCalcute(float i) { saving=i; count(); }
public void count() //实现count()方法
{
sum=saving+(saving*Bank.oneyearRate*0.8); //税后总金额
}
public void show() //实现show()方法
{
System.out.println(" With fixed rate, sum="+sum);
}
}
class Calculate {
public static void main(String args[])
{
int mon=10000;
OneyearRateCalcute rate=new OneyearRateCalcute(mon);
rate.show();
OneyearNationaldebtCalcute debt=new OneyearNationaldebtCalcute(mon);
debt.show();
InterestRateCalcute interest=new InterestRateCalcute(mon);
interest.show();
}
}
6.编写一个应用包的程序。要求定义包、导入并引用包中的类。
分别定义myclass1类和myclass2类,将这两个类组织在mypackage包中,保存到当前路径下的子目录mypackage中
如果要引用这两个类,需要使用import 导入
注意:myclass1.lass和myclass2.class必须放置在当前路径下的子目录mypackage中
//MyClass1.java文件 package mypackage; // 声明包mypackage public class MyClass1 { protected static final int m=10; protected static final int n=20; public int sum() { return m+n; } }
// MyClass2.java文件 package mypackage; //声明包mypackage public class MyClass2 { protected int x=10; protected int y=20; public int multi() { return x*y; } }
//Play.java文件 import mypackage.MyClass1; // 导入类MyClass1 import mypackage.MyClass2; // 导入类MyClass2 class Play { public static void main(String args[]) { MyClass1c1=new MyClass1(); System.out.println("Sum result is "+c1.sum()); MyClass2 c2=new MyClass2(); System.out.println("Multiply result is "+c2.multi()); } }