Merlin

Life was like a box of chocolates. You never know what you're gonna get.

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 0 文章 :: 40 评论 :: 0 Trackbacks

abstract class和interface在Java语言中都是用来进行抽象类定义的

Interface ,给外界的接口,按照规定办事;
Abstract  ,内部继承关系;

interface 就是一组操作的集合,它定义了一个行为集但不作任何具体的实现,这样的话,具体的操作 都可以放在实现类中去,
          体现设计与实现分离的设计思想。

在面向对象的概念中,所有的对象都是通过类来描绘,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
抽象概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

=====================================================================================================================
使用abstract class的方式定义Demo抽象类的方式如下:

				abstract class Demo {
abstract void method1();
abstract void method2();

}



使用interface的方式定义Demo抽象类的方式如下:

				interface Demo {
void method1();
void method2();

}



====================================================================================================================
从编程层面看abstract class和interface

abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系
一个类却可以实现多个interface

在abstract class的定义中,我们可以赋予方法的默认行为
在interface的定义中,方法却不能拥有默认行为

======================================================================================================================
例如要设计一个形状类MShape,从此类可以派生 方形、圆形、三角形等子类。我们就可以将MShape这个父类设计为abstract类。

比如,子类都有 color 属性,因此可以把 color 这个数据成员,以及给 color 赋值的method均设计在父类中,
这样就不用在每个子类中设计相同的代码来处理 color 这个属性。
而如果想计算几何形状的面积,由于各个几何形状的面积计算方式都不相同,所以把计算面积的method的处理放在父类中就不合适,
但由于每个几何形状都需要用到这个method,因此可以在父类中只声明计算面积的method "area()",而把具体的处理放在子类中定义。
即把area()设计为抽象类。

以下是程序代码:
//abstract类 MShape      

				abstract class MShape
{
        protected String color;   //数据成员
        public void setColor(String mcolor)   //一般方法,定义了具体的处理
        {
           color=mcolor;
        }
        abstract void area();   //抽象方法,没有定义具体的处理
}



//方形类

				class RectShape extends MShape
{      
        int width,height,rectarea;    
        public RectShape(int w,int h)
        {  
                 width=w;
                 height=h;        
        }
        public void area()  //计算面积
        {          
          rectarea=width*height;
        }
}



//使用

				public class myapp
{
        public static void main(String args[])
        {
          RectShape rect=new RectShape(3,6);
          rect.setColor("Red");
          rect.area();
          System.out.print("color="+rect.color+", area="+rect.rectarea);
        }
}



由此可见,在abstract中不仅可以定义一般的方法(即可以进行具体处理的方法),还可以象interface一样定义抽象方法。
而在interface中只能定义抽象方法。

posted on 2006-07-11 19:53 Merlin 阅读(405) 评论(0)  编辑 收藏 引用 所属分类: java基础篇

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理