抽象类
抽象类概述
在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法·,该类必须定义为抽象类。
一个方法,要么有方法体,要么就定义成抽象的
定义成抽象的(抽象的就不能创建对象,即不能Animal a = new Animal ( ) ;
抽象类特点
抽象类可以参照多态的形式创建对象
抽象类
猫类
测试类
总结:
- 抽象类和抽象方法必须使用abstract关键字修饰
public abstract class 类名 {}
public abstract void eat () ;
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化
如何实例化?参照多态的方式,通过子类对象实例化,这叫抽象类多态
- 抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类(如下图)
抽象类的成员特点
抽象类可以有构造方法,构造方法用于子类访问父类数据的初始化
非抽象方法,可以提高代码的复用性
父类中的抽象方法是限定子类必须做的事情
总结:
- 成员变量
可以是变量
也可以是常量
- 构造方法
有构造方法,但是不能实例化
作用:用于子类访问父类数据的初始化
- 成员方法
可以有抽象方法:限定子类必须完成某些动作
也可以有非抽象方法:提高代码复用性
案例
猫和狗
动物类
猫类
狗类
测试类
接口
接口概述
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用
java中的接口更多的体现在对行为的抽象
接口的特点
- 关键字:interface
- 类实现接口,用implements
- 接口也是一个抽象内容,不能被实例化。主要是对行为进行抽象,本身也是一个抽象的内容。
- 可以提供多态的方式实例化
接口的实例化也采用多态的形式,用它的实现类对象来进行实例化
抽象类在实现接口的时候,可以不重写接口里面的方法,子类要继承它的时候,还得去重写里面的抽象方法
总结:
- 接口用关键字interface修饰
public interface 接口名 {}
- 类实现接口用implements表示
public class 类名 implements 接口名 {}
- 接口不能实例化
要实现实例化:参照多态方式,通过实现类对象实例化,,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态。
多态的前提:有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象
- 接口的实现类
要么重写接口中的所有抽象方法
要么是抽象类
接口里面的员特点
接口
实现类
测试类
- 显示被final修饰
接口中的成员变量默认就是被final修饰的,即没有成员变量,可以看出常量(因为是被final修饰)
默认修饰符是:public static final int xxx = xx,所以可以直接写int xxx = xx;
- 接口里面不能有构造方法(对行为进行抽象,所以是没有具体存在的)
- 接口里面是不能有非抽象方法的
接口里的成员方法只能是抽象的
改成
- 接口里面没有写public abstract也是默认的
总结:
- 成员变量
只能是常量
默认修饰符:public static final
- 构造方法
接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
一个类如果没有父类,默认继承自Object类
- 成员方法
只能抽象方法
默认修饰符:public abstract
关于接口中的方法,JDK8和JDK9中有一些特性,看后面
案例
猫和狗(接口版)
动物类
猫类
接口
测试类
常用这个,因为它里面有最多的方法
类和接口的关系
- 类和类的关系
继承关系,只能单继承,但是可以多层继承
- 类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口和接口的关系
继承关系,可以单继承,也可以多继承
抽象类和接口的区别
抽象类是对事务的抽象,而接口是对行为的抽象