抽象类和接口
Posted zhouge6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口相关的知识,希望对你有一定的参考价值。
抽象类(abstract)
包含一个抽象方法的类必须是抽象类
抽象类和抽象方法都是用abstract关键字声明
抽象方法只需要声明而不需要实现
抽象类必须被子类继承
子类不是抽象类时必须重写父类中的所有抽象方法
子类是抽象类时仍可以继续声明成抽象方法
public abstract class Hero{ public abstract boolean canFight(Hero hero); public abstract void fight(Hero hero); } /** 子类不是抽象类*/ public class Worrior extends Hero{ @Overrride public boolean canFight(Hero hero){ return false; } @Override public void fight(Hero hero){} } /** 子类是抽象类*/ public abstract class LongRangerHero extends Hero{ //继续作为抽象方法,也可以省略 public abstract void fight(Hero hero); @Override public boolean canFight(Hero hero){ return true; } } /** 子类不是抽象类*/ public class Ranger extends LongRanger{ @Override public void fight(Hero hero){} } /** 子类不是抽象类*/ public class Magical extends LongRangerHero{ @Override public void fight(Hero hero){} }
抽象类不可以用new实例化
接口(interface)
语法
修饰符 interface 接口名
如:public interface Demo{}
类 implements 接口
- 接口是一种与类相似的结构,只包含常量和抽象方法
- 目的是指明相关或不相关类的多个对象的共同行为(功能)
- 在Java中,接口看做是一种特殊的类,与抽象类类似,不能使用new实例化
- 接口必须由其他类实现,实现类不能实现的方法可以继续标识为abstract
- 接口中所有的数据都是public static final,所有方法都是public abstract,默认情况下可以省略这些关键字
- 在Java8中,接口中也可以有方法的实现
接口的优点
使设计和实现完全分离,能够更自然使用多态,可以更容易搭建程序框架,可以更容易更换实现
接口和抽象类的比较
区别 | 接口 | 抽象类 |
---|---|---|
定义关键字 | interface | abstract class |
组成 | 全局常量,抽象方法 | 常量,变量,抽象方法,普通方法,构造方法 |
权限 | 只能是public | 可以使用各种权限 |
关系 | 接口不能够继承抽象类,但可以继承多接口 | 一个抽象类可以实现多个接口 |
使用 | 子类使用implements实现接口 | 子类使用extends继承抽象类 |
局限 | 一个子类可以实现多个接口 | 一个子类只能继承一个抽象类 |
抽象类的缺点:一个子类只能继承一个抽象类,存在单继承的局限
实际开发中,抽象类和接口都可以用的情况下,优先使用接口,避免单继承的局限
以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章