抽象类和接口

1.abstract关键字

        abstract可以修饰类和方法,用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。

注:解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。

抽象类的语法如下:

public abstract class Test{

    abstract void testAbstract();    //定义抽象方法

}

        其中abstract是定义抽象类得关键字,而使用这个关键字定义的方法称为抽象方法。抽象方法没有方法体,这个方法本身没有意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。

使用abstract修饰符需要遵守以下规则:

(1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类必须也定义为抽象类,否则编译报错,所以抽象类和非抽象子类之间也存在多态性。

(2)没有抽象静态方法,static和abstract关键字不能在一起使用。

(3)抽象类中也可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法,但是抽象类不能被实例化,然而可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。

(4)抽象类及抽象方法不能被final修饰符修饰,abstract修饰符与final修饰符不能连用,因为抽象类只有允许创建其子类,它的抽象方法才能被实现,并且只有它的具体子类才能被实例化,而用final修饰的类不允许拥有子类,用final修饰的方法不允许被子类方法覆盖,把abstract修饰符与final修饰符连用,会导致自相矛盾。

(5)抽象方法不能被private修饰符修饰。

    @Override

    public void method() {

        //抽象类不能创建对象

        //AbstractTest a = new AbstractTest();

        //可以创建抽象类类型的对象,由非抽象子类赋值

        //抽象类和非抽象子类之间存在多态性

        AbstractTest a = new Test02();

    }
 

2.接口

在JAVA语言中,接口有两种意思:

        一指概念性的接口,即指系统对外提供的所有服务,类的所有能被外部使用者访问的方法构成了类的接口。

        二是指用interface关键字定义的实实在在的接口,也称为接口类型。它用于明确地描述系统对外提供的所有服务,它能够更加清晰地把系统的实现细节与接口分离。

        接口不是类,编写接口的方式和类很相似,但是他们属于不同的概念,类描述属性的对象和方法,接口则包好包含类要实现的方法。

接口的声明形式为:

[public]  interface  接口名  [extends  父接口名]

{

[public] [static] [final] 类型  常量字段名 = 值;//声明变量

        [public] [abstract] 返回类型 方法名(参数列表);//声明方法

}

接口文件使用时需要注意如下几条:

(1)接口只能用权限修饰符public和默认修饰(一种特殊的抽象类)

(2)每一个接口文件可以包含多个类和接口,但只能有一个和文件名相同的public接口

(3)一个接口生成一个“.class”文件

注:与子类继承抽象父类相似,当类实现了某个接口时,它必须要实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。

3.抽象类与接口的比较

相同点:

都不能被实例化;

都包含抽象方法

区别:

(1)接口中的成员变量只能是public,static和final类型的,而在抽象类中可以定义各种类型的实例变量和静态变量,这是抽象类的优势所在,它可以包含所有子类的共同成员变量,避免在子类中重复定义。

(2)一个类只能继承一个直接的父类,这个父类有可能是抽象类;但一个类可以实现多个接口,这是接口的优势所在。

接口和接口之间有继承关系,而且是多继承关系,多个父接口之间用逗号分隔
接口和类之间没关系,指的是接口在前不能继承或实现一个类
类和接口之间不存在继承关系,但是是实现关系,使用implements表示实现关系,多实现关系
类可以同时继承一个类实现多个接口,但是要求是继承关键字在实现关键字的前面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值