Java面向对象进阶6——权限修饰符(含源码阅读)

Java面向对象进阶6

  • 一、前言
  • 二、权限修饰符
    • 1.权限修饰符的分类
      • 1.1 private
      • 1.2默认
      • 1.3 protected
      • 1.4 public
    • 2.源码阅读
    • 3.使用规则
    • 4.总结
  • 三、小结

一、前言

本文主要是讲述有关Java面向对象中的权限修饰符知识点

二、权限修饰符

1.权限修饰符的分类

1.1 private

私有的访问修饰符,被private修饰的变量、方法以及构造方法之能被所属类访问,接口和类不能声明为private

我们来用IDEA实现代码,发现会报错

public class Phone {
    String brand , colour;
    double price;
    private int ram;
}

public class PhoneTest {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.brand = "华为";
        p.colour = "玫瑰金";
        p.price = 19999.99;
        p.ram = 512;
	}
}

在这里插入图片描述

我们用 Alt + Enter 来查看IDEA提供给我们的解决方案,发现private修饰符被删掉后代码编译不报错

Java面向对象进阶6——权限修饰符(含源码阅读)_第1张图片
Java面向对象进阶6——权限修饰符(含源码阅读)_第2张图片

如果非得要加private修饰符,还想使用。。。也可以,只是会增加许多代码量,代码贴在下方了,各位读者可以了解一下(非常不建议使用!!!

package test1;

public class Phone {
    String brand , colour;
    double price;

    private int ram;

    public void setRam(int ram){
        this.ram = ram;
    }
    public int  getRam(){
        return ram;
    }
}

package test1;

public class PhoneTest {
    public static void main(String[] args) {
        Phone p = new Phone();
        p.brand = "华为";
        p.colour = "玫瑰金";
        p.price = 19999.99;
        p.setRam(512);
        System.out.println(p.getRam());
    }
}

1.2默认

默认,也叫无访问修饰符或默认访问修饰符,可以被本类或者同一个包内其他类访问

在上面举例的代码中,brand , colour两个变量是没用访问修饰符的,但是可以在同一个包的测试类中使用是不会报错的,但是如果使用别的包中的类就会报错
Java面向对象进阶6——权限修饰符(含源码阅读)_第3张图片

1.3 protected

受保护的,成员变量和成员方法不能声明为 protected,并且 protected 不能用来修饰类和接口

1.4 public

公共的,被声明为public的类、方法、构造方法和接口能够被任何其他类访问,如果要访问的public类分布在不同包中,要用import关键字导入包

如果对于包的知识点不熟悉的话,请看上一篇文章

Java面向对象5——包和final(含源码阅读)

2.源码阅读

我们使用 Alt+N 搜索一下ArrayList,并选择java.util包下的
Java面向对象进阶6——权限修饰符(含源码阅读)_第4张图片

查看add方法

在这里插入图片描述

查看扩容方法

在这里插入图片描述
不难看出,方法是私有的,不能被修改

3.使用规则

  • 实际开发中,只有private和public

  • 成员变量要私有

  • 方法要公开

  • 如果方法中代码是抽取其他方法中共性代码,方法也要私有

4.总结

public protected 默认 private
同一类中
同一包中的类
不同包的子类
不同包中的无关类

三、小结

权限修饰符在编写代码时很常用,所以搞清楚其用法对于编写代码很重要 ,如果有任何问题欢迎评论留言

你可能感兴趣的:(Java进阶学习篇,java,开发语言,jvm)