java中,⼀个类实现某个接⼝,必须重写接⼝中的所有⽅法吗?
不⼀定,关键要看⼦类是否是抽象类。
如果⼦类是⾮抽象类,则必须实现接⼝中的所有⽅法;
如果⼦类是抽象类,则可以不实现接⼝中的所有⽅法,因为抽象类中允许有抽象⽅法的存在!
1、抽象类定义
抽象类往往⽤来表征对问题领域进⾏分析、设计中得出的抽象概念,是对⼀系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中⽤ abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能⽣成对象;在java中,含有抽象⽅法的类称为抽象类,同样不能⽣成对象。抽象类是不完整的,它只能⽤作基类。在⾯向对象⽅法中,抽象类主要⽤来进⾏类型隐藏和充当全局变量的⾓⾊。
2、抽象类特点
1)抽象类不能实例化。
2)抽象类可以包含抽象⽅法和抽象访问器。
3)不能⽤ sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。采⽤ sealed 修饰符的类⽆法继承,⽽ abstract 修饰符要求对类进⾏继承。
4)从抽象类派⽣的⾮抽象类必须包括继承的所有抽象⽅法和抽象访问器的实际实现。
3、与具体类的⽐较
1)抽象类不能直接实例化,并且对抽象类使⽤ new 运算符会导致编译时错误。虽然⼀些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对⾮抽象类的实例的引⽤(此⾮抽象类是从抽象类派⽣的)。
2)允许(但不要求)抽象类包含抽象成员。
java接口有没有构造方法3)抽象类不能被密封。
4、与接⼝的⽐较
1)相同点
a、不能实例化;
b、包含未实现的⽅法声明;
c、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅是⽅法包括其他成员)
2)不同点
a、类可以实现⽆限个接⼝,但仅能从⼀个抽象(或任何其他类型)类继承,从抽象类派⽣的类仍可实现接⼝,从⽽得出接⼝是⽤来解决多重继承问题的。
b、抽象类当中可以存在⾮抽象的⽅法,可接⼝不能,且它⾥⾯的⽅法只是⼀个声明必须⽤public来修饰没有具体实现的⽅法。
c、抽象类中的成员变量可以被不同的修饰符来修饰,可接⼝中的成员变量默认的都是静态常量(static final)。
d、抽象类是对象的抽象,然⽽接⼝是⼀种⾏为规范。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论