目录
一.概述
我们知道,所有的对象都是通过类来描述的,但是反过来却不是这样。并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
二.抽象类
2.1 抽象类的定义
Java语言中,用 abstract 关键字来修饰一个类时,这个类叫做抽象类。抽象类只关心它的子类是否具有某种功能,并不关心该功能的具体实现。功能的具体行为由子类负责实现。一个抽象类中可以有一个或多个抽象方法。
抽象类的一般格式如下:
abstract class Animal { //动物类
//类实现
}
一旦 Animal 类声明为抽象类,则它不能实例化,只能用作子类的父类而存在。
因此下面的语句会编译错误:
Animal animal = new Animal ();
由此可见,当一个类的定义完全表示抽象的概念时,它不应该被实例化为一个对象,而应描述为一个抽象类。
抽象方法的一般格式如下:
abstract 返回值类型 抽象方法 ( 参数列表 );
比如语句 public abstract void Method();
抽象方法的一个主要目的就是为所有子类定义一个统一的接口。抽象类必须被继承,抽象方法必须被重写。抽象方法只需声明,无需实现;抽象类不能被实例化,抽象类不一定要包含抽象方法。若类中包含了抽象方法,则该类必须被定义为抽象类。
抽象类有以下定义规则:
1.抽象类和抽象方法必须用 abstract 关键字来修饰;
2.抽象类不能被实例化,不能用 new 关键字生成对象;
3.抽象方法只需声明,不需要实现;
4.含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有抽象方法后,才能被实例化,否则这个子类还是个抽象类。
三.接口
3.1 接口的定义
Java 只支持单一继承,而接口时 Java 实现多重继承功能的一种手段,一种结构。接口只定义了与外界交流时输入,输出的格式,换句话说,通过在接口中定义一些方法(抽象方法),可以用接口大致规划出类的共同行为,而把具体的实现留给具体的类。
接口是抽象方法和常量值的定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口声明的一般格式如下:
public interface 接口名 {
//常量
//方法声明
}
常量定义和部分定义的常量均具有 public ,static 和 final 属性;
接口中只能进行方法的声明,不提供方法的实现,在接口中声明的方法具有 public 和 abstract 属性。
3.2 接口的实现
接口可以由类来实现,类通过关键字 implements 声明自己使用一个或多个接口。所谓实现接口,就是实现接口中声明的方法。接口中的方法被默认是 public ,所以类在实现接口方法时,一定要用 public 来修饰。
如果某个接口方法没有被实现,实现类中必须将它声明为抽象的,该类当然也必须声明为抽象的。