JAVA 抽象类和接口

一:抽象类
抽象类是用abstract修饰符在关键字class前面修饰的一种类,含抽象方法的类一定要声明抽象类,因为这种类不能实例化只能继承,目的是让子类对它进行改进。抽象类里可以包含非静态和最终的域,但不能使用,只能由子类继承。抽象类里面也可以包含静态域和静态方法,用类名可以访问这些静态成员。
二:接口
如果抽象类的方法全是抽象的,则称为接口。接口是JAVA的另一种重要的复合数据类型,是一组方法的定义和常量的集合。接口仅提供了方法的声明,而没有提供方法的实现,且不像抽象方法一样必须在继承树的某个子类中实现。它为相互没有关系的类的共同行为定义方法原型,然后由这些类分别实现这些行为。
接口的优点:建立接口可以为一个抽象类定义协议,而不必担心类的具体实现,留在以后完成;几个类可以共享同一个接口,而不必担心其他类怎样处理接口中的方法;如果继承了某个接口的性质,其他用户就会了解该类有什么方法。
接口适用以下场合:
在无关的类中获得共同点,但不需要这些类建立层次关系;
所声明的方法有多个类都想实现;
了解某对象的编程接口而不需要了解该对象的类,如引用别人开发的包中的类的对象。
为了使一个类继承多个类的属性,可以用接口来达到这个目的。在接口声明的extants后面可以有多个接口名,即当前接口可以包含这些接口中的所有成员,相当于继承了多个类的属性。虽然解决了多继承方面的问题,但接口本身没有多继承性,可以从以下几点看出:不能继承接口的变量;不能继承接口的方法实现;接口层次独立于类的层次,实现相同接口的类并不一定有同样类的层次关系。
为声明一个接口,必须同时给出接口声明部分和接口体部分:
(1)接口声明部分
最简单的接口声明应该有JAVA关键字interface和一个接口名:
interface Myble{

}
为方便起见,接口名以大写字母开头而且常以able或ible结尾。完整的接口声明格式为:
[public]interface InterfaceName [extends list SuperInterfaces]{

}
其中public表明访问限制,该接口可以被任何包的各类使用,若省略,则该接口只能被本包的类使用。extends部分可以包含多个接口名,这点与类的声明的extends部分只有一个超类名不同。多个“超接口”名用逗号隔开,这些接口都由当前声明的新接口来扩展,即继承它们的常量和方法。例如:
public interface Myable extends My1,My2{ //表明本接口Myble继承接口My1和接口My2的常量和方法原型。

}
(2)接口体部分
接口体中有方法的声明但没有方法体,也可以有某些常量的声明。方法都隐含声明为public和abstract,表明它们是公用的抽象方法;常量也隐含声明为public、static和final,表明它们是公用的、、静态的和最终的值,不能改变。接口中常量声明的格式如下:
type NAME = value; //其中type为数据类型,NAME是常量名,通常大写,value是常数值。
方法的声明与类体中的方法声明相似,只是没有方法体,且以分号结尾,例如:
interface Myable{ //本接口声明了一个常量DATE和两个方法,方法体留给实现接口的类来完成。
int DATE =10;
void draw( );
Object paint(Object obj);
}
类中方法声明的有些关键字不能在接口中,如不能用transient、synchronized、volatile关键字,也不能用private(私有变量)和protected(保护变量)访问限制字。
(3)实现接口
接口是由类来实现的,在类声明中若有implements关键字,其后会有若干个在该类中实现的接口名,例如:
class Myclass implements Myable{ //本类实现接口Myable,它的两个方法的方法体将在这个类中完成。
void draw( ){

}
object paint(Object obj){

}
}
如果几个类实现了同一个接口,这些类就具有了一组相同的方法。例如,类Myclass1和Myclass2同时实现了Myable接口,那么它们都可以调用draw()方法和paint()方法。
(4)接口类型
声明一个接口和声明一个类相似,都是定义了一个新的引用数据类型。可以把接口名用于任何可以使基本数据类型名和其他引用数据类型名的地方,例如,有如下接口:
interface Myable{
void draw( );
}
下面的类就把Myable用于声明成员变量和方法的参数中:
class Myclass{
private Myable[ ] op1;
void Mymethod(Myable a,int b);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值