首页 > 代码库 > Java抽象类和接口

Java抽象类和接口

抽象类

  在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。 如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。

  抽象类被abstract关键字修饰的类,由于他是抽象的,也就是存在于意识层面上的类,所以他不能被实例化,实例化的工作应该交由它的子类来完成。

1 abstract class ClassName
2 {
3 }

 

  抽象类和普通类相比,它除了不能创建对象以外,普通类有的他都有(包括构造方法),除此之外,抽象类还能定义抽象方法。

  抽象方法写法:修饰符 abstract 返回值类型 函数名(参数列表);
  修饰符只能是protected或者public,抽象方法不能写方法体,具体的实现方法要交给子类去写。

 1 abstract class ClassName
 2 {
 3     int num;//默认被protected修饰的成员变量
 4     public String str;//公共的成员变量
 5     public static int nums = 10;//静态成员变量
 6     public final static int numss = 10;//常量
 7     public ClassName(){
 8         System.out.println("这是一个构造函数。");
 9     }
10     abstract void method();//默认被protected修饰的抽象方法
11     public abstract void function();//公共权限的抽象方法
12 }

 

  抽象类正常情况下需要写抽象方法(不写也不会报错),但不写的话,那又和普通类又有什么区别,并且他自己还不能被实例化。所以,它需要被继承(没有被继承也不会报错),但如果不被继承,那么抽象类存在的意义呢。

  子类(如果不是抽象类)必须重写抽象类中的全部抽象方法。所以,abstract不能与private、static、final或native并列修饰同一个方法。

class ClassNameSon extends ClassName//继承上面的抽象函数
{
    void method(){}//如果子类不是抽象类,就必须重写父类的抽象函数
    public void function(){}//重写的函数的访问权限不能低于父类
}

 

 

  抽象类总结:抽象类是被用来创建继承层级里子类的模板。

 

接口(interface)

  接口是一些方法特征的集合,这些方法特征来自于具体方法,这些方法符合它们一般来自于一些在系统中不断出现的方法。一个接口只有方法的特征,而没有方法的实现,因此这些方法在不同的地方被实现时,可以具有完全不同的行为。

  接口的定义:和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。

1 interface InterfaceName
2 {
3 }

 

  接口不是类,他没有构造函数,也不能被实例化。接口里只有两种成员:常量和抽象方法。

  常量写法规范:public final static [数据类型] 常量名 = value;

  由于总是使用public static/final修饰符,即使定义时不添加public static/final修饰符,系统也会自动加上,所以可以省略它们。

  接口里的抽象方法和抽象类里抽象方法的写法一样。

  但是由于接口里只有抽象方法,且它们总是使用public abstract修饰符,即使定义时不添加public abstract修饰符,系统也会自动加上,所以可以省略它们。

 1 interface InterfaceName
 2 {
 3     int num1 = 1;
 4     public int num2 = 1;
 5     public static int num3 = 1;
 6     public final int num4 = 1;
 7     public final static int num5 = 1;//在接口中,上面num1-num4都是num5这个常量写法的简写
 8     
 9     void method1();
10     public void method2();
11     abstract void method3();
12     public abstract void method4();//在接口中,method1-method3都是method4这个方法写法的简写
13 }

 

 

  接口总结:接口是实现它的类所需要遵守的规范。

类、抽象类和接口

  1.与抽象类相比,接口的方法都是公共权限的抽象方法,所以它是纯用来被继承、被实现的,否则它将毫无意义。

  2.类之间只能单继承(抽象类也是类),接口之间可以多继承。

 

  3.类可以在继承一个类的同时实现多个接口(包括一个)。

interface Interface1 extends Interface2,Interface3//继承了两个接口,可以继承多个
{}
interface Interface2{}
interface Interface3{}//空接口

class ClassName//空类
{
}
class ClassNameSon extends ClassName implements Interface2,Interface3//只能继承一个类,可以实现多个接口,
{
}

 

 

 

  4.抽象类实现接口,可以不重写接口里面的抽象方法,但这个抽象类的子类(普通类)必须重写接口的抽象方法。

  5.可以用子类调用父类(不管多少代)的常量,包括被实现的接口的常量。抽象类和接口可以直接用自己的类名或接口名调用自己的常量。

 1 public class Blog {
 2     public static void main(String[] args) {
 3         System.out.println(TheInterface.str);//接口调用自己的常量
 4         System.out.println(TheAbstract.str);//抽象类名调用接口的常量
 5         System.out.println(ClassName.str);//调用父类接口的常量
 6     }
 7 }
 8 interface TheInterface{
 9     String str = "What happened!";//常量简写
10     void method();//抽象方法简写
11 }
12 abstract class TheAbstract implements TheInterface{//抽象类可以不重写父类或被实现接口的抽象方法
13     public void myMethod(){
14     }
15 }
16 class ClassName extends TheAbstract{
17     public void method(){}//父类(包括‘祖宗类’,被implements的接口或祖宗接口)的没有被重写的抽象方法都必须重写
18 }

 

Java抽象类和接口