抽象类和接口
来源:互联网 发布:淘宝网上开网店流程 编辑:程序博客网 时间:2024/05/18 02:39
抽象类和接口
抽象类和接口是是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。抽象类和接口之间对于抽象类定义的方面具有很大的相似性,甚至可以相互替换。 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行分析。
一、抽象类
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
实例:定义一个抽象类Animal,提供抽象方法shout(),Dog()和Cat()都继承了抽象类Animal,所以必须实现其重写方法。
public class Demo01 { public static void main(String[] args) { Animal cat=new Cat(); Animal dog=new Dog(); cat.shout();//猫叫:喵喵~~~~ dog.shout();//狗叫:汪汪~~~~ }}// 抽象类abstract class Animal { public abstract void shout(); // 抽象方法}class Cat extends Animal { @Override public void shout() { System.out.println("猫叫:喵喵~~~~"); }}class Dog extends Animal { @Override public void shout() { System.out.println("狗叫:汪汪~~~~"); }}
说明:定义了动物类Animal,这个对于我们来说并不知道具体的是什么动物,所以将其定义成了抽象类。需要子类继承该类,重写该类中所有的抽象方法,这也是一种多态的体现。**注意:**
- 抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
- 抽象方法必须由子类来进行重写。
- 只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包 含有其他方法。
- 抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
- 子类中的抽象方法不能与父类的抽象方法同名。
- abstract不能与final并列修饰同一个类。
- abstract 不能与private、static、final或native并列修饰同一个方法。
二、接口
接口是抽象类的延伸,在Java语言中仅支持单继承,也就是说一个类只能继承一个父类。但是接口却不同,一个类可以实现多个接口。接口可以理解为对一组功能的封装。
实例:定义一个接口擦除Erase,提供抽象方法erase(),Pencil实现了Erase,所以必须重写其方法。
public class Demo02 { public static void main(String[] args) { Erase pencil=new Pencil();//多态 pencil.erase(); }}interface Erase{ //擦除的方法 void erase();}class Pencil implements Erase{ @Override public void erase() { System.out.println("用铅笔写的字实现了擦除"); }}
- 接口使用interface关键字定义
- 一个类实现implements了接口,就需要重写接口中的所有抽象方法
- 如果一个类实现了接口,没有重写所有的抽象方法,这个类也需要定义为抽象类
- 接口也是一种引用数据类型,可以定义变量, 接口引用可以指向实现类的对象
- 接口中的成员变量,默认使用public static final修饰
- 接口中的方法默认使用public abstract修饰
抽象类与接口的区别
- 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
- 抽象类要被子类继承,接口要被类实现。
- 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
- 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
- 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
- 抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。
- 抽象类里可以没有抽象方法。
- 如果一个类里有抽象方法,那么这个类只能是抽象类。
- 抽象方法要被实现,所以不能是静态的,也不能是私有的。
- 接口可继承接口,并可多继承接口,但类只能单根继承。
阅读全文
2 0
- 抽象接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 接口和抽象类
- Unity3D白皮书(一)模型导入设置
- android判断一个Activity是否处于栈顶
- ssm jsp引入Bootstrap
- MusicBee 歌词插件(基于QQ音乐API)
- [ELK] Nginx 监控
- 抽象类和接口
- 8_1 C语言 | 编译原理
- 多态 & 深入探索C++模型
- Unity5.3.3 webgl 注意
- java 冒泡排序程序
- 宏和函数的区别(C语言)
- 排序算法---归并排序
- Kaggle竞赛记录
- Spring4mvc Controller Service map转json json转string