Java抽象类和接口

一、抽象类

1、什么是抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其他功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象类的构造方法定义为protected,因为它只能被子类使用。创建一个具体子类的实例时,其父类的构造方法被调用以初始化父类中定义的数据域。

注:抽象类不可以用于创建对象。抽象类可以包含抽象方法,这些方法将在具体的子类中实现。

2、抽象类的几点说明

(1)抽象方法不能包含在非抽象类中。如果抽象父类得子类不能实现所有的抽象方法,那么子类也必须定义为抽象类的。换句话说,在继承自抽象类的非抽象子类中,必须实现所有的抽象方法。还要注意到,抽象方法事非静态的。

(2)抽象类不能使用new操作符来初始化。但是,仍然可以定义它的构造方法,这个构造方法在于它的子类的构造方法中调用。

(3)包含抽象方法的类必须是抽象的。然而,可以定义一个不包含抽象方法的抽象类。这个抽象类用于作为定义新子类的基类。

(4)子类可以重写父类的方法并将它定义为抽象的。这很少见,但是它在当父类的方法实现在子类种变得无效时是很有用的。在这种情况下,子类必须定义为抽象的。

(5)即使子类的父类是具体的,这个子类也可以是抽象的。例如:object类是具体的,但是它的子类GeometricObject可以是抽象的。

(6)不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。

二、接口

1、什么是接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

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

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口在许多方面多于抽象类很相似,但是它的目的是指明相关或者不相关类的对象的共同行为。例如:使用适当的接口,可以指明这些对象是可比较的、可食用或者可克隆的。

在Java中,接口被看作是一种特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少有点像使用抽象类。例如:可以使用接口作为引用变量的数据类型或类型转换的结果等。与抽象类相似,不能使用new操作符创建接口的实例。

 

2.接口的特性

(1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

(2)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。

(3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

三、接口与抽象类

(1)抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

(2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。

(3)接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。

(4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值