迟来的总结
一、抽象类
抽象类是包含抽象方法的类
抽象类、抽象方法用关键字abstract表示
抽象方法是只有声明而没有方法体的方法。
抽象类的子类必须重写父类当中所有的抽象方法,否则该子类也必须声明为一个抽象类。
抽象类的格式
public abstract class AbstractDemo{//一个类名为AbstractDemo的抽象类
public abstract void run();//这是一个方法名为run的抽象方法
}
抽象类的使用
public abstract class AbstractDemo{
public abstract void run();//
}
public class AbstractSubclass extends AbstractDemo{
@Override//重写在JDK1.5之后可以省略不写
public void run(){
System.out.println("飞奔");
}
}
抽象类的重点:
1.抽象类不能创建对象,如果创建对象,编译无法通过。
2.抽象类中,可以有构造方法,是供子类创建对象是,初始化父类成员使用的。
3.抽象类中,不一定包含抽象方法,但是包含抽象方法的类一定是抽象类。
4.抽象类的子类,必须重写父类中的所有抽象方法,否则编译器无法通过,除非该子类也是抽象类。
二、接口
接口是一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法、成员方法,那么接口的内部主要就是封装了方法,包含了抽象方法(JDK1.7及以前),默认方法和静态方法(JDK1.8),私有方法(JDK1.9)
特点:
1.接口中无法定义成员变量,但是可以定义常量,因为值不可变,默认使用 public static final 修饰。
2.接口中没有构造方法,不能创建对象。
3.接口中没有静态代码块
接口的好处:
1.定义规则
2.降低耦合性【高内聚、低耦合】
3.扩展原有类的功能
接口的定义格式:
public interface InterfaceDemo{
//常量
public static final int i = 1;
//抽象方法
public abstract void method();
//默认方法
public void method1();
//静态方法
public static void method2();
}
接口的实现
public interface InterfaceDemo{
//常量
public static final int i = 1;
//抽象方法
public abstract void method();
//默认方法
public default void method1(){
System.out.println("这是InterfaceDemo的method1方法");
}
public default void method12(){
System.out.println("这是InterfaceDemo的method12方法");
}
//静态方法
public static void method2(){
System.out.println("这是一个静态方法只能通过接口名来调用");
}
}
public class Interfaceimplement implements InterfaceDemo{
@Override
public void method(){
System.out.println("这是method方法");
}
@Override
public default void method12(){
System.out.println("这是Interfaceimplement的method12方法");
}
}
public class Test{
Interfaceimplement inter = new Interfaceimplement();
inter.method;
inter.method1;
inter.method12;
InterfaceDemo.method2;
}
接口的多实现
在继承体系中,一个类只能直接继承一个父类。但是对于接口来说,一个类可以实现多个接口,这叫做接口的【多实现】。并且,一个类能继承一个父类的同时还能实现多个接口。
实现格式:
public class ClassName extends 父类 implements 接口1,接口2,.....{
//重写接口中的所有的抽象方法
//重写接口中的默认的方法【可选】
//抽象方法重名
}
对于多实现中的抽象方法,实现类必须重写所有的抽象方法,如果抽象方法有重名的,只需要重写一次即可。
对于多实现中的默认方法,实现类都可以继承使用,如果默认方法有重名的,【必须重写一次】。
接口中,如果存在同名的静态方法并不会冲突,原因是只能通过各自的接口名访问静态方法。当一个类既继承了一个父类,又同时实现了多个接口,父类中的成员方法与接口当中的默认方法重名,【子类就近选择父类的成员方法】
提示: 子接口重写默认方法,default关键字保留.
三、接口与抽象类的区别
相同点:
1.都包含抽象方法、子类都必须重写这些抽象方法
2.都不能直接实例化对象
3.都位于继承的顶端,用于被其他类实现或者继承
区别:
1.抽象类里面可以包含普通成员方法,接口不能包含普通成员方法
2.一个类只能直接继承一个父类(可是是抽象类),一个类也可以实现多个接口。
3.类与类之间只能单继承关系,接口与接口之间可以多继承
4.抽象类可以定义普通的成员变量和常量,接口只能定义常量 public static final 修饰的。