接口是什么,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)

相关推荐

  • 原神展开攻防壁垒怎么拿?展开攻防壁垒成就获取方法

    原神挑战者第六张专辑有8个小成绩,也有4个隐藏成绩。可以自动获得隐藏成就间传播攻防壁垒的成就。有些玩家可能不知道如何获得原神的攻防屏障。下面介绍原神如何获得传播攻防壁垒的成就。下面...

    教程 2022年9月29日
  • 西兰花炒什么好吃 西兰花炒什么好

    西兰花炒什么好吃 西兰花炒什么好2021-11-18 16:17:491、准备食材如下:西兰花200克,蒜末5克,辣椒末适量,食用油5毫升,盐6克,蚝油3克。2、清水煮沸,倒入西兰花,焯水30秒捞出,倒入食用油,放蒜末,

    生活 2021年11月18日
  • 午后咖啡(一种慢生活情调)

    午后咖啡(一种慢生活情调)午后咖啡(一种慢生活情调)有闲听歌,喝杯咖啡,闻一闻阳光,是多么幸福的一件事。庆幸自己有时能拥有这样的闲情逸致,这样的惬意舒坦。与那些喧闹、大众化的咖啡馆相比,我更喜欢去那些特色的小咖啡馆。在这

    电商 2021年4月30日
  • 淘宝商品加入购物车是不是别人就买不走了,淘宝只有加入购物车没有直接购买

    购物车,淘宝不能加入购物车怎么回事,淘宝不能加入购物车淘宝不能加入购物车怎么回事 买家在淘宝同时想要购买多样商品的,可以先加入淘宝购物车,然后再一起结算,但是有的买家发现淘宝不能加入购物车怎么回事呢?淘宝不能加入购物车主

    电商 2021年11月21日
  • 《坏蛋联盟》电影超清全看版手表1080p

    103010电影超清全看版手表1080p 【坏人联盟】百度云网盘高清资源 《坏蛋联盟》系列导演帕特里克休斯执导的又一部动作喜剧。由凯文哈特、凯莉库柯和伍迪海尔森主演。 重庆某影院负...

    2022年5月13日
  • 最便宜的帐篷多少钱一顶,买个帐篷多少钱

    帐篷多少钱(大概费用)网友提问:帐篷多少钱(大概费用)优质回答:为了短途旅行露营,花两个月的时间添置各种装备,费用整理如下,供参考:1,车:本身就有的斯巴鲁傲虎2,车顶行李箱十侧边帐:某帕,3104元3,双人帐篷:某小驴

    攻略 2021年11月21日