分类: Java
2007-06-05 23:25:33
[Java]abstract class (抽象类)的一个问题
Java抽象类的一个问题
在讲抽象类时,老师为我们总结了一下抽象类的两点特性(并发给我们相应的ppt课件):
1.继承抽象类的子类如果不是抽象类,则必须定义(或实现)抽象类内的抽象方法;
2.抽象类中要包含至少一个抽象方法。
我对第二个特点产生疑问,所以试着修改课本的一个例子,把程序里的一个抽象类里的抽象方法删掉,程序照样可以在JCreator上无错误且无警告地运行。此程序如下:
/************************************************************/
public class Test
{
public static void main(String args[])
{
D200_Card my200=new D200_Card();
my200.balance=50.0;
System.out.println("父类的剩余金额为:"+my200.getBalance());
System.out.println("子类的剩余金额为:"+my200.balance);
}
}
abstract class PhoneCard
{
private double balance;
double getBalance()
{
return balance;
}
}
class D200_Card extends PhoneCard
{
double additoryFee;
double balance;
}
/*************************************************************/
程序运行结果为:
父类的剩余金额为:0.0
子类的剩余金额为:50.0
/***********************************/
可见抽象类里不一定非要一个抽象方法啊。
/********************************************/
一些人认为学java讨论这些问题是钻牛角尖了,那我就没事找点事做吧,呵~
1.查了一下《Thinking in Java(Second Edition)》的中文版,里面也说到:若将某个class声明为abstract,并不强迫你得将所有的函数都声明为abstract。可见,抽象类里不一定非要一个抽象方法。
2.抽象里的含义就是 它必须被具体类实现
3.那我可不可以这样理解:抽象类里必须有抽象方法才好给具体类继承,也就是说具体类继承抽象类的方式就是实现抽象类里的抽象方法呢?好像也不一定。但java有个原则就是非抽象类中不能存在抽象方法。
4.一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体。