精华内容
下载资源
问答
  • 接口的私有成员如果接口的成员是私有的,则不能提供方法的实现,或者不能实现类访问它的字段。因此,接口的成员不能是私有的。如果尝试将接口的成员声明为私有,则会生成一个编译时错误,提示“此处不允许使用...

    Java中的接口类似于类,但是它仅包含final和static的抽象方法和字段。

    由于所有方法都是抽象的,因此无法实例化。要使用它,您需要使用一个类来实现此接口,并为其提供所有抽象方法的主体。

    接口的私有成员

    如果接口的成员是私有的,则不能提供方法的实现,或者不能在实现类中访问它的字段。

    因此,接口的成员不能是私有的。如果尝试将接口的成员声明为私有,则会生成一个编译时错误,提示“此处不允许使用修饰符私有”。

    示例

    在下面的Java示例中,我们试图将接口的字段和方法声明为私有。public interface MyInterface {

    private static final int num = 10;

    private abstract void demo();

    }

    编译时错误

    编译时,上面的程序生成以下错误。

    输出结果MyInterface.java:2: error: modifier private not allowed here

    private static final int num = 10;

    ^

    MyInterface.java:3: error: modifier private not allowed here

    private abstract void demo();

    ^

    2 errors

    接口的受保护成员

    通常,可以在相同的类中或在继承该类的类中访问受保护的成员。但是,我们不继承将要实现的接口。

    因此,不能保护接口的成员。如果尝试声明接口的成员受保护,则会生成一个编译时错误,提示“此处不允许使用修饰符保护”。

    示例

    在下面的Java示例中,我们尝试声明受保护接口的字段和方法。public interface MyInterface{

    private static final int num = 10;

    private abstract void demo();

    }

    编译时错误

    编译时,上面的程序生成以下错误。

    输出结果MyInterface.java:2: error: modifier private not allowed here

    private static final int num = 10;

    ^

    MyInterface.java:3: error: modifier private not allowed here

    private abstract void demo();

    ^

    2 errors

    展开全文
  • 原标题:教你Java接口中定义方法基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。但是JDK8里面,你是可以突破这个界限的哦。假设我们现在有一个接口:TimeClient,其...

    原标题:教你在Java接口中定义方法

    基本上所有的Java教程都会告诉我们Java接口的方法都是public、abstract类型的,没有方法体的。

    但是在JDK8里面,你是可以突破这个界限的哦。

    假设我们现在有一个接口:TimeClient,其代码结构如下:

    0f9d2b0fe05de610b3e8c41873489ca8.png

    接下来,SimpleTimeClient类实现了TimeClient接口,具体代码如下:

    22219b4db047dd2fe404125168a4a93b.png

    1361e6b9bed2100743fff8aa5f3e0ed4.png

    现在假设你想在接口TimeClient中添加一个新功能,通过这个功能我们可以指定我们所在的时区。

    0598c738d71ad9525618f23d0bb10c12.png

    随着TimeClient的变化,你不得不修改你的SimpleTimeClient类,实现getZonedDateTime方法。一般来说,设置时区这个功能会是各个TimeClient实现类中通用的一个功能。这个时候,你通常会选择再定义一个AbstractTimeClient类来实现getZonedDateTime方法。而在JDK8中,你可以选择直接在接口中来实现该方法(interface已经把手伸到abstract class的地盘了)。

    d80f14b3e108688409c03b29661b31be.png

    从上面的例子,我们可以看到通过static和default修饰符我们可以直接在接口中实现方法体,同时不要忘记,任何在接口中方法声明都是public类型的哦。

    OK,现在我们需要一个新的接口:AnotherTimeClient,它得继承TimeClient接口。那么,对于TimeClient接口中定义的getZonedDateTime方法,你可以做如下三种处理:

    重新声明getZonedDateTime方法,使它变成abstract类型。

    重新定义getZonedDateTime方法。

    直接继承。

    而static方法和我们在类里面定义的static方法概念一致。返回搜狐,查看更多

    责任编辑:

    展开全文
  • 引入Java 8时,我们可以在接口中使用默认方法。 此功能的主要驱动程序是允许接口扩展,同时保留对旧接口版本的向后兼容性。 一个示例是在现有Collection类中引入stream()方法。 有时候,当我们想引入几种默认方法...

    java中接口私有反方

    引入Java 8时,我们可以在接口中使用默认方法。 此功能的主要驱动程序是允许接口扩展,同时保留对旧接口版本的向后兼容性。 一个示例是在现有Collection类中引入stream()方法。

    有时候,当我们想引入几种默认方法时,它们可能共享一些通用的代码库,因此,如果我们可以在接口中使用私有方法,那就太好了。 这样,我们可以重用我们的代码,还可以防止代码暴露给正在使用或正在实现接口的类。

    但有一个问题。 接口中的私有和受保护访问被推迟到Java9。那么,今天如何在Java 8中使用私有接口方法呢?

    一个简单的解决方案

    假设我们有两个方法Foo bar()bazz()都将返回一些难以计算的结果,这些结果是从这样的共享代码中发出的:

    public interface Foo {
    
        default int bar() {
            return complicatedMethodWithManyLinesOfCode();
        }
    
        default int bazz() {
            return complicatedMethodWithManyLinesOfCode() + 1;
        }
    
        
        // Will not work in Java 8 because interface methods cannot be private!
        private int complicatedMethodWithManyLinesOfCode() {
            // Actual code not shown...
            return 0;
        }
    
    }

    通过引入一个包含私有方法的class ,我们可以从外部访问“隐藏”该方法,并几乎摆脱Java 8接口中的私有方法。 可以这样完成:

    public interface Foo {
    
        default int bar() {
            return Hidden.complicatedMethodWithManyLinesOfCode();
        }
    
        default int bazz() {
            return Hidden.complicatedMethodWithManyLinesOfCode() + 1;
        }
    
        class Hidden {
    
            private static int complicatedMethodWithManyLinesOfCode() {
                // Actual code not shown...
                return 0;
            }
        }
    
    }

    从外部类或接口看不到方法Foo:complicatedMethodWithManyLinesOfCode但是可以看到Hidden类本身。 但是,如果它们是私有的,则看不到“ Hidden方法和字段。

    此方案也可以应用于受保护的接口方法访问。 从技术上讲,我们可以在一个接口中扩展Hidden类,该接口还可以扩展原始接口Foo 请记住,受保护的方法在包中也是可见的,因此,如果我们扩展或使用同一包中的接口,则受保护的方法也是可见的(与以往一样)。

    一个缺点是隐藏方法无法访问接口中的其他方法。 通过使隐藏的静态方法采用接口类型的参数,可以轻松地解决后一个缺点。 假设complicatedMethodWithManyLinesOfCode方法需要Foo接口中的另一个值,该值可以通过名为buzz()某些接口方法获得,则它可能看起来像这样:

    public interface Foo {
    
        default int bar() {
            return Hidden.complicatedMethodWithManyLinesOfCode(this);
        }
    
        default int bazz() {
            return Hidden.complicatedMethodWithManyLinesOfCode(this) + 1;
        }
    
        int buzz();
    
        class Hidden {
    
            private static int complicatedMethodWithManyLinesOfCode(Foo foo) {
                // Actual code not shown...
                return 0 + foo.buzz();
            }
        }
    
    }

    翻译自: https://www.javacodegeeks.com/2016/03/java-8-declare-private-protected-methods-interfaces.html

    java中接口私有反方

    展开全文
  • 接口方法声明只能是public abstract的,所以不管你在声明的时候加不加abstract,都是可以的。Java 8开始,接口还引入了默认方法,也就是可以接口的方法提供默认的实现,默认方法应当声明为:public default并实现...

    接口方法声明只能是public abstract的,所以不管你在声明的时候加不加abstract,都是可以的。Java 8开始,接口还引入了默认方法,也就是可以给接口的方法提供默认的实现,默认方法应当声明为:public default并实现,public可以省略。

    举个例子:public interface Test() {

    // 以下四种声明方式都是合法的接口方法声明

    void test1();

    public void test2();

    abstract void test3();

    public abstract void test4();

    // 默认方法可以省略public,但不能省略default,并且需要添加实现

    default void hello() {

    System.out.println("Hello");

    }

    public default hello(String name) {

    System.out.println("Hello, "+name);

    }

    }

    展开全文
  • 主题说明了其中的大部分——静态方法不能在接口中声明这一事实的原因是什么?public interface ITest {public static String test();}上面的代码给出了以下错误(至少在Eclipse中):"接口方法itest.test()的非法修饰...
  • Java接口是方法原型的规范...嵌套接口Java允许另一个接口内或一个类内将这些接口称为嵌套接口,从而编写/声明接口。示例下面的Java示例,我们有一个名为Sample的类,其中包含一个名为myInterface的嵌套...
  • Java接口类似于类,但是它仅包含final和static的抽象方法和字段。由于所有方法都是抽象的,因此无法实例化。要使用它,您需要使用一个类来实现此接口,并为其提供所有抽象方法的主体。使接口最终化。如果声明了...
  • 阅读commander模块的声明文件,代码底部export导出的部分声明文件将一个接口导出,commander/typings/index.d.ts的代码如下 ```typescript // Type definitions for commander 2.11 // Project: ...
  • 是的,您可以在接口内定义一个类。通常,如果接口的方法使用此类,并且在其他地方不使用它,则将在接口声明一个类。示例interfaceLibrary{voidissueBook(Bookb);voidretrieveBook(Bookb);publicclassBook{...
  • 但是让我的后端开发的过程,我想加入微信公众号后台图文编辑里的“声明原创”和“赞赏”的功能,如下图所示: ![图片说明](https://img-ask.csdn.net/upload/201909/19/1568866455_565894.png) 我微信公众平台...
  • JDK1.8接口可以对方法的声明写具体实现,个人觉得这有点违背接口的设计初衷。下面我们来具体看一下:1、JDK8之前的写法:1)首先定义两个接口:IEat,IWalkpublic interface IEat {void eat();}public ...
  • 这没有Thread的类,怎么可以直接声明Thread的对象呢?[/color] NewThread(String threadname) { name = threadname; t = new Thread(this, name); System.out.println("New thread: " + t); t.start(); //...
  • 接口声明

    2018-03-20 11:13:00
     接口可以理解为对一组方法声明进行统一命名,但是这些方法没有提供任何实现,也就是说,吧一组方法声明在一个接口中 然后继承于该接口的类都需要实现这些接口。  注意:  1、接口名称第一个字符必须是I。  ...
  • 在java中,接口像类一样,可以有方法和变量,但在接口中声明的方法默认是抽象的(只有方法签名,没有主体)。接口是指定类必须执行什么操作,而不是如何操作。如果类实现了接口并且没有为接口中指定的所有函数提供方法...
  • Java中的接口(interface)类似于类,但是它仅包含final和static的抽象方法和字段。静态方法是使用静态关键字声明,它将与类一起被加载到存储器。...示例在下面的示例中,我们在接口中定义一个静态方法,并从实...
  • 例如这个例子public interface ZipCodeServer {public String getCityName(int zipCode);}zipCode的目的是什么.理想情况下,我只想拥有public interface ZipCodeServer {public String getCityName(int);}而不...
  • 接口声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但...
  • 我们 Controller 定义接口的时候,一般都是像下面这样: @GetMapping("/01") public String hello(Map<String,Object> map) { map.put("name", "javaboy"); return "forward:/index"; } 估计很少有人会...
  •  可以在接口中声明事件,然后在类中实现该事件的引用。在为方法订阅事件时,可以订阅接口声明的事件,也可以订阅类中的事件。 class InterfaceEvent { static void Main(string[] args) { Shape s = ...
  • JDK1.8接口可以对方法的声明写具体实现,个人觉得这有点违背接口的设计初衷。下面我们来具体看一下:1、JDK8之前的写法:1)首先定义两个接口:IEat,IWalkpublic interfaceIEat {voideat();}public ...
  • 要强调Oliver Charlesworth评论所说的内容:这些信息是否公开是最重要的区别.从编写问题的方式来看,似乎你谈论一个字段(而不是方法参数或返回值).根据定义,私有字段是一个实现细节,您可以任意具体.因此将它...
  • Java接口类似于类,但是它仅包含final和static的抽象方法和字段。接口的私有字段如果接口...示例下面的Java示例,我们试图将接口的字段和方法声明为私有。publicinterfaceMyInterface{privatestaticfinalin...
  • JDK1.8接口可以对方法的声明写具体实现,个人觉得这有点违背接口的设计初衷。 下面我们来具体看一下: 1、JDK8之前的写法: 1)首先定义两个接口:IEat,IWalk public interface IEat { void eat();...
  • mybatis操作中接口中的方法可以定义成有返回值当你只调用方法时它只执行和它相关的方法,当你调用它并且将它的返回值赋值给一个返回值类型时就可以将相关信息打印出来,这里你可能想"我们并没有定义它的具体实现...
  • 这篇文章主要是简单总结一下Java的类和接口的一些内容。类类是具有相同属性和服务的一组对象的集合...接口接口(Interface),JAVA编程语言是一个抽象类型,是抽象方法的集合(接口里面都是抽象方法),接口通...
  • java接口的方法声明

    2013-09-23 08:25:46
    接口的定义 访问修饰符 interface 接口名{ 接口方法声明1; 接口方法声明1; ...1.接口的方法总是抽象的,无论是否显示声明 ...2.接口的方法总是公共...4.接口中可以没有任何方法,这样的接口称为标记接口。 5.接口中声
  • 在java中,接口像类一样,可以有方法和变量,但在接口中声明的方法默认是抽象的(只有方法签名,没有主体)。接口是指定类必须执行什么操作,而不是如何操作。如果类实现了接口并且没有为接口中指定的...
  • 确实,接口中可以声明常量,声明抽象方法,也可以继承父接口,但就是不能有具体实现,因为接口是一种契约(Contract),是一种框架性协议,这表明它的实现类都是同一种类型,或者是具备相似特征的一个集合体。...
  • java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的...一、定义变量一般情况下,我们在Java进行定义常量时,通常可以将常量定义在接口里面去。为了方便大家的理解,小编会举一个例子来说明...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,339
精华内容 3,735
关键字:

在接口中可以声明