开发者社区> 流楚丶格念> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java权限修饰符(包括Java8 default介绍)

简介: Java权限修饰符(包括Java8 default介绍)
+关注继续查看

权限修饰符


概述


在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,


  • public:公共的。


  • protected:受保护的


  • default:默认的


  • private:私有的


不同权限的访问能力


image.png


可见,public具有最大权限。private则是最小权限。


编写代码时,如果没有特殊的考虑,建议这样使用权限:


  • 成员变量使用 private ,隐藏细节。


  • 构造方法使用 public ,方便创建对象。


  • 成员方法使用 public ,方便调用方法。


小贴士:不加权限修饰符,其访问能力与default修饰符相同


default关键字介绍


今天复习偶尔看到了有default关键字,这是有生之年第一次见到这个关键字,然后百度了一下,发现是Java8的新特性,所以干脆详细学习一下,整理了下面的东西。


default常用于接口中,从它的中文意思行来看,大概能猜个差不多,我们本来写Java接口的时候,是不能有方法体的函数,就类似于C++中的虚函数,default关键字在接口中修饰方法时,方法可以有方法体,来看一个例子。


举例


Default类


public interface Default {
 
    default public void method(){
        System.out.println("接口中的方法");
    }
}


一个接口,method方法在使用关键字default后可以有方法体了。


public class DefaultImpl implements Default {
 
    @Override
    public void method() {
        System.out.println("类中的方法");
    }
 
    public static void main(String[] args){
        Default d = new DefaultImpl();
        d.method();
    }
}


DefaultImpl实现了Default接口,最终运行结果:


类中的方法


而此时如果Default接口再加一个方法呢,如果这个方法没有default关键字修饰,则DefaultImpl没有实现这个方法就会报错,这就体现了default关键字的作用。我们继续修改Default接口。


Default接口如下:


public interface Default {
 
    default public void method(){
         System.out.println("接口中的方法");
    }
 
    default public void doSomeThing(){
         System.out.println("在接口中搞事情");
    }
}


DefaultImpl并没有重写doSomeThing方法


public class DefaultImpl implements Default {
    @Override
    public void method() {
         System.out.println("类中的方法");
    }
    // 此时没有去重写接口中的方法doSomeThing
    // 在这里会默认生成一个,子类对象调用时候会直接使用接口中的doSomeThing方法
    public static void main(String[] args){
        Default d = new DefaultImpl();
        d.method();
        d.doSomeThing();
    }
}


运行结果如下:


类中的方法
在接口中搞事情


运行结果符合Java多态的特性,default关键字可以让接口中的方法可以有默认的函数体,当一个类实现这个接口时,可以不用去实现这个方法,当然,这个类若实现这个方法,就等于子类覆盖了这个方法,最终运行结果符合Java多态特性。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java 将两个日期的时间段按照一定天数进行周期切割
Java 将两个日期的时间段按照一定天数进行周期切割
122 0
Java中4种权限修饰符的范围
Java中4种权限修饰符的范围
43 0
Java中4种权限修饰符的范围
Java中4种权限修饰符的范围
47 0
Java锁介绍
Java锁介绍
377 0
Java8新特性总结
Java8新特性总结 Lambda 表达式 Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中) 它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念 用Lambda表达式实现Runnable 我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。
2816 0
javaWeb概要介绍
javaWeb概要介绍 我的GitHub地址:https://github.com/heizemingjun 我的博客园地址:http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址:http://blog.
924 0
JAVA 入坑教程 | 章节四 修饰符
Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 例子 public class className { // ... } private boolean myFlag; static final double weeks = 9.
859 0
+关注
流楚丶格念
csdn平台优质创作者,51cto TOP博主,360图书馆科技博主,燕山大学目前大三在读,日拱一卒,功不唐捐,加油!!!
1010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载