前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中interface属性和实例方法

Java中interface属性和实例方法

作者头像
FunTester
发布2020-02-17 16:12:46
2K0
发布2020-02-17 16:12:46
举报
文章被收录于专栏:FunTester

给定代码:

代码语言:javascript
复制
interface Nameable {
    default void setName(String name) {
        this.name = name;
    }
    default String getName() {
        return this.name;
    }
}

class Employee implements Nameable {
    protected String name;
}

class HR {
    public static void main(String[] args) {
        Employee e = new Employee();
        e.setName("John Doe");
        System.out.println(e.getName());
    }
}

结果是什么?单选题。

A.接口Nameable无法编译。B.类Employee无法编译。C.类HR无法编译。D.输出John Doe。

这段代码研究了default添加到Java 8 中的方法功能的各个方面。默认方法是在接口中通过实现定义的实例方法。尽管与在类中定义的常规实例方法相比,此类方法的继承方式有所不同,但是此功能仍然在Java中创建了多种实现继承的形式。

为了限制多重继承引起的问题,Java采取了两个步骤。第一个只是告诫您将功能用于特定和有限的目的,尤其是库接口的扩展(尽管有趣的是核心API本身实际上违反了该指南)。第二个问题是,尽管可以定义方法,但实例变量却不能定义(除了public static final的值)。同样,在类中声明的字段对接口不可见(类实现了接口,但是接口无法知道哪些类可以实现它们);default方法无法访问任何实例变量。因此,避免了多重实现继承的真正麻烦的问题。

这些选择的结果是,尽管default方法确实具有this引用(它们是实例方法),但是只能通过实例方法(abstractdefault)以及public static final在接口中声明的字段访问。直接引用任何常规实例状态是不可能的。(abstract方法的实现可以这样做,但是此类代码是在类中编写的,而不是在接口中编写的。)

在此问题中,Nameable接口中没有name字段。因此,无法编译this.name中这两种default方法的实现,因为他们无法访问到接口实例中的字段。由此,选项A是正确的。

让我们看一下在接口中添加变量的问题。假设这样添加String nameNameable接口:

代码语言:javascript
复制
interface Nameable {
    String name = "John Doe";
    …
}

默认情况下,接口中的所有字段都是final(因此,在声明期间必须进行赋值),它们是publicstatic

使用此添加,将编译getName在Nameable接口中声明的方法。这里再次是为了方便:

代码语言:javascript
复制
default String getName() {
    return this.name; // 可以的
}

但是,该setName方法仍将无法编译,因为final修饰的变量无法重新赋值:

代码语言:javascript
复制
default void setName(String name) {
    this.name = name; // 错误的
}

因此,即使String name在接口中添加了字段,如果不对default方法的代码做进一步的更改,代码也不会如所示那样编译。


  • 郑重声明:文章首发于公众号“FunTester”,禁止第三方(腾讯云除外)转载、发表。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档