首页 / JAVA / JAVASE-抽象类和接口
JAVASE-抽象类和接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVASE-抽象类和接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1921字,纯文字阅读大概需要3分钟。
内容图文
![JAVASE-抽象类和接口](/upload/InfoBanner/zyjiaocheng/607/7afb1de9d89b425699b676f726258f4c.jpg)
抽象类和接口的区别
区别1:
子类只能继承一个抽象类,不能继承多个
子类可以实现多个接口
区别2:
抽象类可以定义
public,protected,package,private
静态和非静态属性
final和非final属性
但是接口中声明的属性,只能是
public
静态
final的
即便没有显式的声明
注: 抽象类和接口都可以有实体方法。 接口中的实体方法,叫做默认方法
public abstract class Dog {
public abstract void eat();
public abstract void sleep();
}
//通过接口定义
public interface Dog {
public abstract void eat();
public abstract void sleep();
}
一个简单的例子:狗都具有 eat() 、sleep() 方法,我们分别通过抽象类和接口定义这个抽象概念 //通过抽象类定义
但是我们现在如果需要让狗拥有一项特殊的技能——钻火圈 DrillFireCircle(),如何增加这个行为呢?
思考:
1.将钻火圈方法与前面两个方法一同写入抽象类中,但是这样的话,但凡继承这个抽象类狗都具有了钻火圈技能,明显不合适
2.将钻火圈方法与前面两个方法一同写入接口中,当需要使用钻火圈功能的时候,就必须实现 接口中的eat() 、sleep() 方法(重写该接口中所有的方法)显然也不合适
那么该如何解决呢 ? 我们可以仔细想一想,eat和sleep都是狗本身所应该具有的一种行为,而钻火圈这种行为则是后天训练出来的,只能算是对狗类的一种附加或者延伸, 两者不应该在同一个范畴内,所以我们考虑将这个单独的行为,独立的设计一个接口,其中包含DrillFireCircle()方法, Dog设计为一个抽象类, 其中又包括eat() 、sleep() 方法.
一个SpecialDog即可继承Dog类并且实现DrillFireCircle()接口
//定义接口,含有钻火圈方法
public interface DrillFireCircle() {
public abstract void drillFireCircle();
}
?
//定义抽象类狗类
public abstract class Dog {
public abstract void eat();
public abstract void sleep();
}
//继承抽象类且实现接口
class SpecialDog extends Dog implements drillFireCircle {
public void eat() {
//....
}
public void sleep() {
//....
}
public void drillFireCircle() () {
//....
}
}
总结:
继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如狗是否能钻火圈,能则可以实现这个接口,不能就不实现这个接口。
内容总结
以上是互联网集市为您收集整理的JAVASE-抽象类和接口全部内容,希望文章能够帮你解决JAVASE-抽象类和接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。