1.抽象类
(1)概念:用abstract修饰的类叫抽象类
(2)特点:①不能实例化,但是存在构造器
②抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类
③可以没有方法体,但是必须用abstract修饰,此时的方法叫抽象方法
④抽象类可以被继承,如果子类是一个普通类,就应该重写父类的抽象方法, 并写出{};如果子类是抽象类,满足抽象类的特点即可。
⑤abstract不能与final并列修饰同一个类
⑥abstract不能与private、static、final或native并列修饰同一个方法
(3)实例:定义一个抽象动物类Animal,提供抽象方法叫play(),猫、狗都是动物类的子类,由于play()为抽象方法,所以Cat、Dog必须要实现play()方法。如下:
2.接口
(1)概念:interface,是一个抽象类型,是抽象方法的集合,接口不是类,所以没有构造方法。接口是一种用来建立类与类之间的协议,它所提供的是一种形式,没有具体的实现。接口解决了java语言不能多继承的缺陷。
(2)特点:①如果有方法,一定是抽象方法,abstract关键字可以省略
②如果有属性,一定常量,常量的修饰词:public static final;常量的名字全都大写
③没有构造器,不能实例化
④实现接口的实现(非抽象类)类必须实现该接口的所有方法,抽象类可以不用实现
⑤继承只能存在一个父类,但是一个类可以同时实现多个接口,不管这些接口之间有没有关系。
⑥Interface的所有方法访问权限自动被声明为public
⑦不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量引用(refer to)一个实现该接口的类的对象。可以使用instance of检查一个对象是否实现了某个特定的接口。例如:if(anObject instance of Comparable){}
⑧实现多接口一定要避免方法名的重复
⑨ 为了避免在接口中添加新方法后要修改所有的实现类,接口中允许定义默认方法(default方法)。
(3)实例:
3.接口与类的异同
相同点:①一个接口可以有多个方法
②接口文件保存在.java结尾的文件中,文件名使用接口名
③接口的字节码文件保存在.class结尾的文件中
④接口相对应的字节码文件必须在与包名称相匹配的目录结构中
区别:①接口不能用于实例化对象
②接口没有构造方法
③接口中的所有方法必须是抽象方法
④接口不能包含成员变量,除了static和final变量
⑤接口不是继承,而是实现
⑥接口与接口之间可以多继承
4.接口与抽象类的区别
①抽象类中的方法可以有方法体,但是接口中的不可以
②抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final型的
③接口中可以含有静态方法(用static修饰的方法)(只能用本类名去调用,在任何地方都可以),但是不能有静态代码块,抽象类中可以有静态代码块和静态方法
④一个类只能继承一个抽象类,但是可以实现多个接口