接口是什么,java接口是干什么用的

接口是什么,java接口是干什么用的 引对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。那么,java中抽象类和接口的区别是什么?本文我们将详解Java中

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。

那么,java中抽象类和接口的区别是什么?本文我们将详解Java中接口和抽象类的区别。

抽象类:Java中被abstrac关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法是特殊的方法:只有声明,没有具体实现。例如:

package com.yiyi.vx.test;

//  抽象类
public abstract class Demo {
    //  抽象方法
    public abstract void method1();
}

如果一个类中含有抽象方法,那么这个类一定是抽象类,且必须由abstract关键字对类进行修饰。java语法规定抽象类不能被实例化

---得到结论A.抽象类不能被实例化

刚刚也有提到,当一个类中含有抽象方法时,那这个类一定是抽象类。但是抽象类不一定含有抽象方法。

---得到结论B.包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

没有抽象方法的抽象类有啥作用呢?

无抽象方法的抽象类HttpServlet源码如下所示:

public abstract class HttpServlet extends GenericServlet {
    
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_get_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }

    }

    protected long getLastModified(HttpServletRequest req) {
        return -1L;
    }

    protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        if (DispatcherType.INCLUDE.equals(req.getDispatcherType())) {
            this.doGet(req, resp);
        } else {
            NoBodyResponse response = new NoBodyResponse(resp);
            this.doGet(req, response);
            response.setContentLength();
        }

    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_post_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }

    }

    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_put_not_supported");
        if (protocol.endsWith("1.1")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }
    }
    .....
}

可以看出,它的默认方法均为非抽象方法。但它却是实实在在以abstract修饰的抽象类。这么做,就可以让它的子类在继承后,选择性的去复写抽象类的方法,这样就更加灵活和便捷,不需要复写的方法就不会在子类进行一个复写操作。

从这里可以看出,抽象类本身就是为了继承而存在的,如果创建了抽象类而不去继承它复写它的方法的话,那么这个抽象类就白创建了。

---得到结论C.抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

抽象类还有两个其他特性:

D.一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

E.抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用

接口:Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐式指定为public static final,使用private修饰编译器会报错。而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

d、JDK1.8中对接口增加了新的特性:(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;(2)、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

如下例子所示:

public interface Person{
  public static final int a=10;
  //JDK1.8
    default void sayHello(){
        System.out.println("Hello World");
    }
    public void say();
}
public abstract class Person{
  public abstract void say();
  public void eat(){};
}

如上述代码所示:

接口只能是功能的定义,而抽象类既可以为功能的定义也可以为功能的实现。

接口与抽象类的区别

相同点

(1)都不能被实例化 (2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点

(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。

(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

(3)接口强调特定功能的实现,而抽象类强调所属关系。

(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/34499.html

(0)

相关推荐

  • birds of a feather flock together(my ideal life is to marry you home)

    根据市场研究机构SellCell发布的数据,对谷歌Pixel6系列和iPhone13系列2款手机的价格进行综合研究发现,安卓手机的保值率明显低于苹果,手机发布一两个月后市场价格直接...

    科技 2021年12月15日
  • 女孩霸气最火个性标签(24条霸气高冷到爆的短句)

    女孩霸气最火个性标签(24条霸气高冷到爆的短句)一、我从不奉承谁,嘴巴也不够甜,但你要令我失望,我就有资本让你绝望。
    二、你把性格交给星座,把努力交给鸡汤,把运气交给锦鲤,那么你过得不好,也是正常的。
    三、女人,别活的跟

    阅读 2021年3月15日
  • 人民币豹子号老虎号(人民币有豹子号老虎号还有什么号)

    。注:本文转载自网络,如有侵权,请在后台留言联系我们进行删除,谢谢 ? ? 接触过收藏的朋友大概都知道或者是听说过豹子号这个说法,这是对人民币流水号八位数中尾数有几位相同的叫法,至...

    生活 2021年12月28日
  • 自闭症孩子被拒绝你会伸出手吗(2岁半可以确诊自闭症吗)

    自闭症的特征之一就是社交困难,这让不少家庭陷入困难。35岁的大迫环奈(化名)就是这样一位普通的日本母亲,因为女儿茉莉(化名)被诊断疑似患有自闭症,孩子连牵手她都迟迟无法做到。

    生活 2021年12月18日
  • 普通人创新创业项目排行榜前十名,大学生创业项目选什么好

    创业项目排行榜前十名普通人创新创业项目排行榜前十名,大学生创业项目选什么好很多人在开始创业前,都会想要从各个渠道来了解自己到底适合什么项目,这样才能避免自己走太多弯路。因此,在下文中,小编就根据近年来优质的创业项目来说一

    生活 2021年11月30日
  • 什么手游可以赚钱,玩什么手游游戏能赚钱

    手游玩什么游戏可以赚钱有收入的手游?《红警OL》已经上线很长时间,不过却是最为稳定的能搬砖赚钱手游。游戏内很多大佬在收资源,只要开多个游戏账号,囤积资源卖给大佬,就可以有稳定的收入。这款手。有哪些手游可以挣钱?能挣到钱么?梦幻西游可以赚钱,端游和手游都可以。只不过不多,端游每个月正常1000-2000是可以的,手游少一点。具体如下分析 梦幻西游端游 首先需要知道一下先期投入,练个 1。有没有什么手游,能搬砖赚钱的?学生党,当个副业?大概介绍下冰雪传奇这款游戏,这款游戏的特色:可以打金,可以PK,地图大,BOSS多,攻沙有激情。冰雪传奇所有装备全部打怪爆!商城不卖装备! 我是新区直接开了武 直。

    阅读 2022年6月24日