Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376661
  • 博文数量: 70
  • 博客积分: 1837
  • 博客等级: 上尉
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-02 00:05
文章分类

全部博文(70)

文章存档

2013年(6)

2012年(4)

2011年(14)

2010年(5)

2009年(12)

2008年(8)

2007年(21)

分类: 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.一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体。

阅读(976) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~