Java_log2000_类与对象6

类篇entry4

关键词: 抽象类; 接口; 抽象类与接口;

抽象类

抽象(abstract)类的概念:用abstract修饰的类称为抽象类,用abstract 修饰的成员方法称为抽象方法。

  • 抽象类和具体类的关系就是一般类和特殊类之间的关系,是继承和被继承的关系。
  • 抽象类中可以有零个或多个抽象方法,也可以包含非抽象方法。只要有一个抽象方法,类前就必须有abstract修饰。若没有抽象方法,类前也可有abstract修饰。
  • 抽象类不能创建对象,创建对象由具体子类来实现,但可以有声明,声明能引用所有具体子类的对象。
  • 对于抽象方法,在抽象类中只指定方法名及类型,而不写实现代码。抽象类必定要派生子类,若派生的子类是具体类,则具体子类中必须实现抽象类中定义的所有抽象方法(覆盖);若子类还是抽象类,如果父类中已有同名abstract方法,则子类中就不能再有同名的抽象方法了。
  • 在抽象类中,非抽象方法可以调用抽象方法。
  • abstract不能与final并列修饰同一个类(产生逻辑矛盾);
    abstract 不能与private ,static(因为static修饰的方法必然被直
    接调用),final或native并列修饰同一个方法;abstract 类中不能
    有private成员——这些因为抽象类必然要有子类。
抽象类的产生过程

抽象类形成的思维过程:客观事物—>对象—>类—>抽象类。

抽象类设计注意
  • 在设计抽象类的具体子类时,追求它们在实现抽象方法方面所表
    现的不同性。例如作为shapes,当s引用矩形时,返回矩形周长
    和面积,当引用三角形时,返回三角形周长和面积,当引用圆时
    返回圆周长和面积等等。作为抽象类的具体实现者,每个子类必
    须给出其周长和面积的具体计算方式。
  • 在确定抽象类的抽象方法时,一定要确保这些抽象方法就是同类
    对象共同行为的抽取,否则,抽象方法的设计不当,会为继承这
    个抽象类的体系带来不利影响。因为抽象类中的任何改动都将关
    系到整个类体系的改变,所以抽象类中的信息应尽可能和研究对
    象的本质相关。

接口(interface)

接口的两种含义:

  • 可以被引用调用的方法(public方法或同包中的protected方法或默认方法);
  • 另一种是同“类”概念地位相当的专有概念interface, interface是方法说明的集合。
interface声明格式
  [public] interface 接口名[extends 父接口名列表]
  {   
     //静态常量数据成员声明
     [public][static][final] 域类型 域名 = 常量值 
  //抽象方法声明
     [public][abstract]返回值 方法名(参数列表)[throw 异常列表]
  }
定义接口要注意几点
  • 接口定义用关键字interface,而不是用class,interface前的修饰符要么为public,要么为缺省。
  • 接口定义的数据成员全是final static(静态常量)。即使没有修饰符,其效果也等效,访问级别要么为public,要么为缺省。
  • 接口中没有构造方法;所有成员方法都是抽象方法(与抽象类有所不同)。即使没有修饰符,其效果完全等效,访问级别要么为public,要么为缺省。注:方法前不能修饰为final。
  • 接口具有继承性,可通过extends关键字声明接口的父接口。

接口扮演将实现者和使用者有机联系到一起的角色。

接口实现要注意几点
  • 在类中,用implements关键字来实现接口。一个类可以实现多个接口,在implements后用逗号隔开多个接口的名字。一个接口也可被多个类来实现。
  • 接口的实现者可以继承接口中定义的常量,其效果等效于在这个实现类当中定义了一个静态常量。
  • 如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现接口的所有抽象方法,而且方法头部分应该与接口中的定义完全一致。
  • 如果实现接口的类是abstract类,则它可以不实现该接口的所有方法。但对于抽象类的任何一个非抽象的子类而言,接口中的所有抽象方法都必须实现。这些方法体可以来自抽象的父类(被子类继承),也可以来自子类自身的实现,这主要体现了非抽象类中不能存在抽象方法的原则。
  • 接口的抽象方法的访问限制符如果为缺省或public时,类在实现方法时,必须显式使用public修饰符,否则将被警告为缩小了接口中定义的方法的访问控制范围。

抽象类与接口

抽象类与接口


visitor tracker
访客追踪插件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值