一、什么是抽象类
一个类中只定义了方法但没有定义具体实现的类称之为抽象类,在 java 中通过 abstract 关键字修饰一个类进行定义抽象类,且每个未被定义具体实现的方法也同时被 abstract 修饰并成为抽象方法;
语法格式:
public abstract class 抽象类名{ 类体; public abstract 返回值类型 抽象方法名(参数列表); // 抽象方法 }
二、抽象类有什么特点
调用抽象类是以继承的方式进行的,所以抽象类可以被继承调用(实现),但是抽象类无法进行创建对象,只能生成抽象类一个非抽象的子类后才能创建实例,子类继承抽象类时,要对抽象类中的抽象方法进行实现处理;
抽象类中可以有非抽象的方法和属性,但是不是抽象类的类无法拥有抽象方法;
抽象类的创建对象只能以多态的形式父类型指向子类,通过子类来创建一个实例对象;
抽象类中可以拥有构造方法

1 public class Test34 extends Arr { 2 3 // 对抽象类中的抽象方法进行实现 4 public void f() { 5 6 } 7 8 public static void main(String[] args) { 9 10 // 抽象类无法创建对象,只能以多态的形式(父类型指向子类型)创建对象 11 Arr a = new Test34(); 12 int o = a.bs; 13 System.out.println(o); 14 } 15 16 } 17 18 // 创建了一个抽象类 19 abstract class Arr{ 20 21 int bs = 200; // 属性 22 abstract void f(); // 抽象方法 23 }
三、什么是接口
接口是体现抽象类功能的另一种方式,为了更好的说明,就要通过抽象类来解释说明接口,在抽象类中可以拥有变量和其他方法与抽象方法,但是接口却只能拥有抽象方法和变量,其所有的方法读没有任何方法体,所有的方法只能是抽象方法(但不用abstract 修饰),可以看成一个更加纯粹的抽象类,用 interface 关键字来创建接口;
语法格式:
[接口修饰符] interface 接口名 [extends 父接口列表]{ ...... // 方法原型或静态常量 }
四、接口的特点
1、java 不能实现多继承,但是 java 允许一个类可以实现多个接口,从而实现多继承的能力;
2、子类调用接口不是叫继承,叫实现,且用 implement 来进行子类对接口的实现,并且 extends 与 implement 可以同时存在并使用;
3、在子类进行实现接口的过程中,必须对其接口中的方法进行实现;
4、在接口中定义的成员变量都默认为终极静态变量,即系统会自动添加 fianl 和 static 两个关键字,要对其手动初始化赋值;
5、与抽象类相同,接口无法创建对象,只能通过继承它的子类来进行多态(父类型指向子类型)来进行创建实例对象;
6、如果多个接口与同一个子类相关联,那么就可以来测试一个对象是否为一个类的实例,如果为真,两个接口可以强制转换;

1 public class Test35 extends D implements A,B,C{ 2 3 public static void main(String[] args) { 4 5 // 创建对象 6 A a = new Test35(); // 多态 7 B b = new Test35(); 8 C c = new Test35(); 9 10 int x = a.I; 11 System.out.println(x); 12 13 if (c instanceof A) { 14 System.out.println("yes"); 15 a = (A)c; 16 } 17 18 } 19 20 public void put1() { 21 22 } 23 24 public void put2() { 25 26 } 27 28 public void put3() { 29 30 } 31 32 } 33 34 // 创建多个接口 35 interface A{ 36 int I = 6; // 静态变量 37 void put1(); 38 } 39 40 interface B{ 41 void put2(); 42 } 43 44 interface C{ 45 A I = null; 46 47 void put3(); 48 } 49 50 class D{ 51 public void fun() { 52 53 } 54 }
五、接口的作用
接口的产生,实质上是在类的基础上再抽象类与类之间的相似点,将其共同点组成一个平台,提供给子类使用,其目的还是对 java 程序再一次解耦合,使 java 程序的扩展力再一次提高