Java基础---abstract class、interface 、extends、implements

在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。
abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,
因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。
abstract class 和 interface 在Java语言中都是用来进行抽象类定义的

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

2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,
而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,
不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,
interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是 public,abstract 类型的。

含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象,
abstract class 类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法
含有 abstract 方法的类必须定义为 abstract class,abstract class 类中的方法不必是抽象的。
如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为 abstract 类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。

接口中的方法定义默认为 public abstract 类型,接口中的成员变量类型默认为 public static final。

语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

抽象类中的抽象方法的访问类型可以是 public,protected 和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
抽象类中可以包含静态方法,接口中不能包含静态方法
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,
但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类型。
一个类可以实现多个接口,但只能继承一个抽象类。
两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
而抽象类在代码实现方面发挥作用,可以实现代码的重用
**

extends、implements

简单说:

1.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,

2.JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,

3.继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ,
比如 class A extends B implementsC,D,E

术语话来说:
extends 继承类;implements 实现接口。

 **类和接口是不同的:类里是有程序实现的;而接口无程序实现,只可以预定义方法**

 Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。

 如以Java程式语言的角度来看﹐Java的interface则表示:

 一些函数或资料成员为另一些属于不同类别的物件所需共同拥有,则将这些函数与资料成员定义在一个interface中,然后让所有不同类别的Java物件可以共同操作使用之。 
 Java的class只能继承一个父类别(用extends关键字),但可以拥有(或称实作)许多interface(用implements关键字)。  

extends和implements有什么不同?
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。

 interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。这些实现的class的实例完全可以当作interface的实例来对待。在interface之间也可以声明为extends(多继承)的关系。

注意:一个interface可以extends多个其他interface。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值