栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中 `default`访问控制符的有意思一点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中 `default`访问控制符的有意思一点

文章目录
  • java中 `default`访问控制符的有意思一点
    • 具体说明
    • 示例代码

java中 default访问控制符的有意思一点

我们知道,java中的四种访问控制符控制范围

修饰符作用范围
public (公共访问权限)在该类中、子类、同一个包的其它类、其它包中的其它类都能访问。
protected (子类访问权限)在该类中、子类(同一个包中和不同包中)、同一个包中的其它类能访问到。
default (包访问权限)在该类中、子类(同一个包中)、同一个包中的其它类都能访问。
private (当前类访问权限)在该类中能访问。

有意思的是 java8中interface 里可以有default方法,接口里的default方法,可以被它实现的子类继承得到也可以重写覆盖掉,不论子类是否和该接口在同一个包中,就像是个特例一样。然而类中的default方法依旧遵循上面提到的规则,下面我门来具体看看。

具体说明

示例代码结构图如下所示:

  • 一个DefaultClass类含有default方法setDe()、getDe() 和default属性 de
  • 一个 DefaultInterface接口含有default方法 sayHello()
  • defaults 包下有个Package类 继承 DefaultClass 实现 DefaultInterface
  • test 包下有个Package类 继承 DefaultClass 实现 DefaultInterface

下图中 defaults 包下的Package类 继承了同包下的DefaultClass和同包下的DefaultInterface,由于是同包下,所以能顺理成章的获得父类和父接口的 default的方法和属性

下图中 test 包下的Package类 继承了不同包下的DefaultClass和DefaultInterface,由于是不同包下,
所以不能获得父类的default属性和方法,但是特殊的是能继承获得到父接口的 default的方法SayHello() 这就是特殊点 接口的default作用和类的default修饰的细微区别

示例代码
  • DefaultClass
package com.example.spring_life_cycle.defaults;


public class DefaultClass {
    String de;
    protected String name;

    void setDe(String de) {
        this.de = de;
    }

    String getDe() {
        return de;
    }
}
  • DefaultInterface
package com.example.spring_life_cycle.defaults;


public interface DefaultInterface {

    
    default void sayHello() {
        System.out.println("Hello!");
    }
}
  • defaults 包下的 Package
package com.example.spring_life_cycle.defaults;


public class Package extends DefaultClass implements DefaultInterface {
    public static void main(String[] args) {
        DefaultClass defaultClass = new DefaultClass();
        defaultClass.setDe("aaaa");
        System.out.println(defaultClass.getDe());

        Package aPackage = new Package();
        aPackage.sayHello();
    }
}
  • test 包下的 Package
package com.example.spring_life_cycle.test;

import com.example.spring_life_cycle.defaults.DefaultClass;
import com.example.spring_life_cycle.defaults.DefaultInterface;


public class Package extends DefaultClass implements DefaultInterface {
    public static void main(String[] args) {
        DefaultClass defaultClass = new DefaultClass();
        System.out.println(defaultClass.get);

        Package aPackage = new Package();
        aPackage.sayHello();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号