接口存在的原因:

JAVA是单继承的,不支持多继承,但是有了接口,JAVA可以实现多个接口;

一个类要是实现某一个接口就必须实现接口内声明的所有方法(强迫执行,即便是空方法,也要实现);

接口特点:

1.接口内所有方法只有声明,没有方法体(隐式声明),例如:public abstract void func();

2.接口内的所有变量都默认是public static final ,必须被显示初始化;

3.接口没有构造方法,不能被实例化;

4.实现接口的类要实现所有的抽象方法,否则该类就必须声明为抽象类,加上 abstract关键字;

5.接口不可以实现接口(所有接口都是抽象方法嘛),但是接口支持多继承哟!

那么有接口要抽象类做什么呢?

首先我们认识一下抽象类

1.抽象类内允许有一般变量和一般方法;

2.抽象类必须有abstract关键字;

3.抽象类里面可以没有抽象方法,但是即便如此,也不能实例化;(有抽象方法的一定是抽象类)

4.抽象类虽然不能被实例化,但是有构造方法(派生类可以扩展)

好了那么说一说抽象类,怎么用呢,什么时候用抽象类???

当有多个类实现同一个接口的时候,那么每个类都把那一个接口的所有方法实现了(如上文:实现接口,必须实现接口的所有方法);

那么如果有几个方法,在这几个子类中的实现完全一样,我们就可以用抽象类来把这些方法单独拿出来作为公共方法;

由抽象类来实现接口内,这些子类的公共方法(就是实现方式完全一样的),然后这些子类只要继承这个抽象类就OK了。

那么接口和抽象类应用逻辑就出来了

第一步,先写一个接口,声明实现这个接口应该要做的所有方法;

第二步,这个接口的实现有公用的部分,用抽象类来实现,这样抽象类里有所有方法的声明,以及公共方法的实现,所以简化了接口的实现

第三步,派生类只要继承并实现抽象类就OK!

以上文字如果觉得,有点绕,那么请看代码示例:

先声明一个接口

  public interface InterExample{// 声明一个接口

         public abstract  void  function1();

         public abstract  void  function2();

         public abstract  void  function3();

         public abstract  void  pubFunct();  // 公用方法声明

  }

  声明抽象类,实现上面的接口

public abstract class AbsExample  implements InterExample{
// 实现公用方法
public void pubFunction(){
System.out.println("这是派生类的公用方法");
}//
}

 一般类(继承了抽象类的派生类)

public class ExampleA extends AbsExample{
        public abstract  void  function1(){
            System.out.println("A派生类个性化使用的方法1");
        }

        public abstract  void  function2(){
            System.out.println("A派生类个性化使用的方法2");
        }

        public abstract  void  function3(){
            System.out.println("A派生类个性化使用的方法3");
        }    
}

  

public class ExampleB extends AbsExample{
public abstract void function1(){
System.out.println("B派生类个性化使用的方法1");
} public abstract void function2(){
System.out.println("B派生类个性化使用的方法2");
} public abstract void function3(){
System.out.println("B派生类个性化使用的方法3");
} }

代码里面看到:公共方法即:pubFunction(),在抽象类内实现了,ExampleA,ExampleB公用,没有必要在ExampleA、ExampleB两个类内分别各写一遍相同的实现代码了;

另外:如果增加子类ExampleC,pubFunction()的实现和ExampleA、ExampleB不同,那么只要在ExampleC内重写一遍该方法就好,依然保持灵活。

重新整理的抽象类和接口,希望能为大家答疑解惑!

JAVA抽象类与接口的详细解读与示例的更多相关文章

  1. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  2. Java 抽象类与接口总结

    一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法  含有抽 ...

  3. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  4. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  5. Java抽象类和接口的比较

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  6. java抽象类与接口区别

    java抽象类与接口区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstr ...

  7. Java抽象类和接口的区别(好长时间没看这种文章了)

    Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...

  8. Java 抽象类和接口的理解

    Java 抽象类和接口的理解 一.抽象类 为什么使用抽象类(个人理解): 面向对象的概念是,我们知道的所有的对象都是通过类来描绘的,如果类包含的信息不能描绘一个具体的对象,就需要抽象来解决了,意思是一 ...

  9. 记录:JAVA抽象类、接口、多态

    JAVA抽象类.接口.多态 1. 多态 定义 多态是同一个行为具有多个不同表现形式或形态的能力.(多态就是同一个接口,使用不同的实例而执行不同操作) 如何实现多态 继承和接口 父类和接口类型的变量赋值 ...

随机推荐

  1. [阅读笔记]Zhang Y. 3D Information Extraction Based on GPU.2010.

    1.立体视觉基础 深度定义为物体间的距离 视差定义为同一点在左图(reference image) 和右图( target image) 中的x坐标差. 根据左图中每个点的视差得到的灰度图称为视差图. ...

  2. HTTP性能小测试

    一直说node.js如何如何好,就来测试一下吧~~ 首先接受一个小工具 Apache Bench简称ab 可以用来测试http性能 利用Apache Bench测试Web引擎性能关于此工具的详细介绍参 ...

  3. Forward和Redirect的区别

    一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求 ...

  4. css实现定高的元素在不定高的容器中水平垂直居中(兼容IE8及以上)

    容器设置相对定位 元素设置宽高,并使用绝对定位,上下左右值均为0,margin:auto 如下所示: <!DOCTYPE html> <html> <head lang= ...

  5. React初识(按钮点击+输入绑定)

    简单按钮点击事件: <!DOCTYPE html><html>  <head>  <meta charset="utf-8">    ...

  6. jq中数组应用的错误

    js中数组可以这样使用: <ul id="ul"> <li value="1">s</li> <li>f< ...

  7. html文件里引入文件html文件

    导入通用的代码除了使用php外 iframe在很多界面使用起来比较方便 比如说要写导航 在好几个界面都要用这个导航 可以用iframe引用 实例:这个header.html是我写的一个导航界面 在in ...

  8. virtualbox安装增强功能(centos6.5)

    vitualbox安装增强功能(centos 6.5) 1. 安装依赖包 #yum install kernel-headers-$(uname -r) #yum install kernel-dev ...

  9. C# 反射浅析

    反射是一个运行库类型发现的过程.通过反射可以得到一个给定程序集所包含的所有类型的列表,这个列表包括给定类型中定义的方法.字段.属性和事件.此外,通过反射也可以动态的发现一组给定类支持的接口.方法的参数 ...

  10. jquery 源码解析 节点遍历

    jquery遍历,用于根据其相对于其他元素的关系来查找或选取html元素,以某项选择开始,并沿着这个选择移动,知道移动被称为对dom进行遍历 ☑ <div> 元素是 <ul> ...