抽象&接口

 

抽象类的特点:
  <1> 抽象方法一定在抽象类中
  <2> 抽象方法和抽象类都必须被abstract关键字修饰
  <3> 抽象类不可以用new创建对象,因为调用抽象方法没意义
  <4> 抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用; 如果子类只覆盖了部分的抽象方法,那么该子类还是一个抽象类。
  <5> 抽象类中可以有抽象方法也可以有非抽象方法
  <6> 抽象类和一般类没有太大的不同:   该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂得东西。这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体
  <7> 抽象类比一般类多了个抽象函数,就是在类中可以定义抽象方法; 抽象类不可以实例化。
  特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让改类建立对象。

抽象类的成员特点:
  1:成员变量:子类可以直接继承抽象类中的成员变量。(抽象类中的成员变量可以和以前是一样的)
  2:成员方法:抽象类中分为两种方法,一种是抽象方法,这种方法在子类中必须要被实现。一种是普通的方法。可以被子类直接继承使用。
  3:构造方法:抽象类不能被实例化,那么它有构造方法吗?抽象类是class,那么它就有构造方法。它的构造方法有用吗?有,为了让子类实例化的时候使用。
  模板方法:
    在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去。有该类的子类去实现。

抽象关键字abstract不可以和哪些关键字共存?

private
私有的,外部直接无法访问。
static
那么这个时候抽象方法就可以可以通过类名调用,但是这样是没有意义的。
final
final修饰的方法不能被重写。所以它和abstract冲突。


  
接口(interface)

接口的由来:当一个类中所有的方法都是抽象的时候,你没必要定义为抽象类,定义为接口就可以了。

接口与类属于同一层次,实际上,接口是一种特殊的抽象类。

一个类实现接口,相当于它继承一个抽象类
  

接口解决了java中只能单继承的问题。(对多继承进行了优化)
  1:类与类:只能是单继承。 extends
  2:接口与接口:可以是单继承,也可以是多继承。 extends
  3:类与接口:可以是单实现,也可以是多实现。 implements
 (3)成员特点:
  1:只有成员变量和成员方法。
  2:成员变量 默认修饰符 public static final
   int X = 20;
   其实是这样的 public static final int X = 20;
  3:成员方法 默认修饰符 public abstract
  void show();
  其实是这样的 public abstract void show();

接口和抽象类的区别:
  1:抽象类只能被单继承;接口可以被多实现。
  2:抽象类中的成员:成员变量:可以是常量,也可以是变量。
       成员方法:可以是抽象的,也可以是非抽象的。
       构造方法:虽然不可以创建对象,但是可以给子类实例化用。
     接口中的成员:成员变量:只能是常量。默认修饰符 public static final
     成员方法:只能是抽象的。默认修饰符 public abstract
  3:抽象类中定义的是体系结构中的共性的内容。
     接口中定义的是对象的扩展功能。
  4:抽象类被继承表示的是:"is a"的关系。xx是yy中的一种。
     接口被实现表示的是: "like a"的关系。xx像yy中的一种。

 

 

总结:

如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。

abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。

abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。

final和abstract永远不会同时出现。

如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。

所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。

抽象是所有对象的共性功能而接口是对象的扩展功能

 

             

 

 

原文地址:https://www.cnblogs.com/sooper/p/3407287.html