黑马程序员——Java基础---抽象类和接口的区别
来源:互联网 发布:java脚本返回上一页 编辑:程序博客网 时间:2024/05/16 05:46
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
没有方法体的方法称为抽象方法,使用abstract关键字修饰,有抽象方法的类必须声明为抽象类,并且使用abstract关键字修饰,抽象类不能new对象,原因在于抽象类含有抽象方法,抽象方法中没有方法体,调用了没有意义,所以不能被调用。抽象类不一定含有抽象方法。
抽象类与方法的定义格式:
abstract class 类名
{
abstract 返回值类型 方法名();//此处不可以定义方法体。
}
为什么要定义抽象类
如果有多个类具有相同的方法声明,而方法的实现不一样,这时就可以抽象出父类,将方法在父类中声明,当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体,将抽取出的功能定义到抽象类中。抽象方法强迫继承父类的子类覆盖此方法。
抽象类的特点:
1,抽象方法一定在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象。因为抽象方法中没有方法体,调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类覆写所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类,因为只要存在抽象方法的类就是抽象类,只覆盖部分抽象方法,则继承了另外的抽象方法,因此还是一个抽象类。
抽象类比一般类多个了抽象方法,抽象类不可以实例化,抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。抽象类是一个父类,要给子类提供实例的初始化,因此抽象类中也有构造函数。
被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。final与abstract不能共用。
Private修饰的类的方法,是私有的方法,不被子类所知,所以无法被复写同,而抽象方法出现的就是需要被复写。abstract与 private也不能同时出现。
Static修饰静态方法可以在没有创建对象的情况下直接用类名调用,但是,抽象方法中没有方法体,运行没有意义,因此,在同一方法中,Static与abstract不能共存。
接口可以认为是一种特殊的抽象类,接口中声明的所有方法都是抽象的,使用interface关键字修饰一个接口,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
Class 用于定义类
interface 用于定义接口。
接口定义时的格式特点:
1.接口中常见定义:常量,抽象方法。
2.接口中的成员都有固定修饰符。
方法默认是公有的抽象的,被public abstract修饰
变量默认为全局常量,使用public static final修饰
3.接口中的成员都是public的。
接口的定义格式:
interface 接口名
{
public static final 变量类型 变量名 = 值;//接口中可以没有变量
public abstract void 抽象方法名();
}
可简写为:
interface 接口名
{
变量类型 变量名 = 值;
void 抽象方法名();
}
同时,为了便于阅读理解,通常用完整的代码定义接口。
接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。一个类实现接口,使用implements关键字。
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口,即多实现,也是对多继承不支持的转换形式。java支持多实现。接口与接口之间可以有继承关系,接口继承接口,使用extends关键字,接口支持多继承,接口不能继承抽象类,因为抽象类中可能有不抽象的方法。
抽象类(abstract class)和接口(interface)的区别
1.抽象类中可以有不抽象的方法,接口中全是抽象的方法
2.抽象类用extends继承,接口用implements实现
3.抽象类中的变量和方法没有默认修饰符,接口中的变量默认为public static final的,接口中的方法默认为public abstract
4.一个类只能继承一个抽象类,一个类可以实现多个接口
定义抽象类与接口的时机
如果能用接口,就不用抽象类,因为别人实现接口可以不占用继承的位置。如果定义一个抽象的父类,其中所有方法都是抽象的,那么就定义为接口,需要有不抽象的方法,那么只能定义为抽象类,因为接口中的方法必须全是抽象的,抽象类中可以有非抽象方法。
- 黑马程序员——Java基础--接口和抽象类的区别
- 黑马程序员——Java基础---抽象类和接口的区别
- 黑马程序员——解析Java中抽象类和接口的区别
- 黑马程序员—JAVA基础之继承、抽象类、接口
- java基础—抽象类和接口的区别
- 黑马程序员——java基础——抽象类和接口
- 黑马程序员——JAVA基础----多态、抽象类和接口
- 黑马程序员--Java基础--抽象类和接口
- 黑马程序员--java基础--抽象类和接口
- 黑马程序员—抽象类和接口
- 黑马程序员—抽象类和接口
- 黑马程序员——java基础,类的继承,抽象,接口
- 黑马程序员_Java基础篇(三)——抽象类和接口的对比
- 黑马程序员——java接口与抽象类的区别之缺省适配模式
- 黑马程序员---java抽象类与接口的区别
- 黑马程序员--抽象类和接口的区别
- 黑马程序员——Java基础---继承、抽象、接口
- 黑马程序员——java基础--继承、抽象、接口
- 华为OJ 201301 JAVA题目0-1级
- ios使用代理的时候一定要用weak
- 信息类专业国际会议/期刊影响因子汇总
- SharedPreferences的使用
- android out of memory(OOM)产生原因
- 黑马程序员——Java基础---抽象类和接口的区别
- Android ViewPager用法
- zoj1586 QS Network(最小生成树)
- c语言中注意细节
- Apache DBUtils使用总结
- 随想录(一个android原生app的代码赏析)
- OC日期与时间
- nginx启动初始化过程(二)
- HDU2078 复习时间【水题】【数学】