首页 / JAVA / Java基础之抽象类和接口
Java基础之抽象类和接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java基础之抽象类和接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2197字,纯文字阅读大概需要4分钟。
内容图文
今天来说说抽象类和接口的实现以及它们的区别。我们知道抽象类和接口都是对具体事物的抽象,接口在实现上比抽象类更加抽象,抽象类中可以有普通方法和变量,而接口中只有抽象方法和不可变常量。但是从另一个角度看,抽象类似乎又比接口更具抽象,我们在开发过程中选择定义抽象类或是接口往往是通过判断是对这一事物本质的抽象还是动作行为上的抽象,对事物本质的抽象我们选择用抽象类来定义,对动作行为的抽象我们往往采用接口进行抽象定义。下面我们从抽象类以及接口的定义上再对它们的进行区别:
一、抽象类
package com.ring2.Abstract; public abstract class AbstractTest { String a = "a"; private String b = "b"; publicstaticfinal String C = "C"; //以上可以看出抽象类可以修饰和普通类一样的常量、变量publicvoid funA() { //抽象类可以有普通方法 } publicstaticvoid funB() { //可以有静态方法 } //以上可以看出抽象类可以和普通类一样声明普通方法publicabstractvoid funC(); publicabstract/*static,final*/void funD(); //抽象类的方法不能被static或final修饰publicstaticvoid main(String[] args) { //抽象类不能被实例化,但是可以通过匿名内部类的方式实例化或是通过其子类实例化。 AbstractTest a = new AbstractTest() { @Override publicvoid funD() { } @Override publicvoid funC() { } }; } }
从上面的代码我们知道了抽象类具有以下特点:
- 可以同时有抽象方法和普通方法以及变量
- 抽象类不能被实例化,但可以通过匿名内部类以及子类实现
- 子类必须重写抽象类中的抽象方法,除非子类也为抽象类
- 子类中的抽象方法访问权限应大于或等于父类的方法权限
二、接口
package com.ring2.Interface; public interface InterfaceTest { // private String a = "A"; 编译错误,接口中的常量只能被 public static final修饰,故只有常量 String B = "B"; //默认会被加上修饰符: public static final String B = "B";/*public void funA() { //编译出错,接口中不能有普通方法 }*/void funB();//接口中的抽象方法默认会被加上修饰符:public abstract,且只能被public abstract修饰publicstaticvoid funC() { //接口中可以有静态方法,同样只能被public修饰 //only public, abstract, default, static and strictfp are permitted } publicdefaultvoid funD() { //接口中可以有默认方法 } }
从上面的代码我们可以总结接口的特点:
- 接口中只有不可变常量,没有变量
- 接口中的方法只能有抽象方法、静态方法、default方法
- 接口同样不能实例化
- 子类必须重写接口中的
除了以上这些还有许多要注意的点,抽象类是被继承(extends),Java中抽象类以及普通子类只能单继承一个父类。接口是被实现(implements),普通子类及抽象类可以多实现接口,但是接口可以多继承接口。 接口中的default方法以及静态方法是在JDK1.8后新增的特性;需要注意的是,实现了有default方法的接口不需要重写default关键字,在实现的多个接口中,如果有同名的default方法则需要进行重写来区分。
public class TestDefault implements InterfaceTest,InterfaceTest2 { @Override publicvoid funB() { // TODO Auto-generated method stub } @Override publicvoid funD() { //InterfaceTest、InterfaceTest2都有相同名称的default方法 System.out.println("需要重写两个接口中相同的default方法"); } }
使用方向:当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。注意:抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶
段会降低难度的。
原文:https://www.cnblogs.com/ring2/p/11141868.html
内容总结
以上是互联网集市为您收集整理的Java基础之抽象类和接口全部内容,希望文章能够帮你解决Java基础之抽象类和接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。