1.概念
抽象类:被abstract 修饰的类就是抽象类 如:abstract class Animal{ },抽象类的作用就是为了去让子类去继承它,提高代码重用性!
接口:我们可以把它看做是一种特殊的抽象类,接口中的所有方法都必须是抽象的,接口中的方法定义默认为 public abstract 类型,接口中的成员产量类型默认为 public static final。
2.抽象类和接口的异同点
相同点:
二者都不能实例化一个类如果继承了某个抽象类或者实现了接口,都需要对里面的抽象方法全部进行实现,否则还需被声明为抽象类。不同点:
抽象类接口实现子类使用extends关键字来继承抽象类子类使用implements关键字来实现接口构造器抽象类中可以定义构造器接口中不可以定义构造器成员变量抽象类中可以定义成员变量接口中的成员变量其实就是常量,默认被public、static、final修饰方法可以有抽象方法和普通方法可以有抽象方法(默认被public、abstract修饰)和普通方法(必须声明default修饰)静态方法抽象类中可以有静态方法JDK1.8 以后可以有静态方法
3.程序说明
抽象类:
abstract class Animals{ //抽象方法 public abstract void f1(); //普通方法 public void f2() {}; protected void f3(){}; void f4(){}; private void f5(){}; //静态方法 public static void f6() {}; } //不实现抽象方法,则跟着抽象 abstract class Dog extends Animals{ } //实现抽象类中的方法 class Cat extends Animals{ @Override public void f1() { System.out.println("猫会跑"); } }
接口:
interface B1{ // 接口这里的方法默认是被public修饰的 void f1() ; //接口中可以有普通方法,但必须声明 default default void f2() { System.out.println("我是普通方法"); } //静态方法 public static void f6() {}; } interface C{ } class E implements B1,C{ // 这里如果不写public程序会报错,因为如果不写的话, f1()方法是被默认修饰符修饰的,它的访问权限小于public public void f1() { System.out.println("B接口的抽象方法在我这里实现了"); } }