小议abstract class和interface

本文主要介绍Java语言中abstract class和interface用于抽象类定义的相关内容。阐述了二者概念,interface体现设计与实现分离思想,abstract class表示继承关系。从编程层面对比,一个类只能继承一个abstract class,却能实现多个interface,且abstract class可赋予方法默认行为,interface则不能。

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中只能定义抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值