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

简介: 在上面举例的代码中,brand , colour两个变量是没用访问修饰符的,但是可以在同一个包的测试类中使用是不会报错的,但是如果使用别的包中的类就会报错

一、前言


本文主要是讲述有关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;
  }
}

eb5d17f3bfb14d438d8548171181965c.png


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


9ac971d6267b4ba592db05ebbefc932b.png

4f80c3f929d6486fa61f42b3f15f4137.png


如果非得要加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两个变量是没用访问修饰符的,但是可以在同一个包的测试类中使用是不会报错的,但是如果使用别的包中的类就会报错


67a9e62024c04bd5beb5ec2e269b1048.png


1.3 protected


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


1.4 public


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


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


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


2.源码阅读


我们使用 Alt+N 搜索一下ArrayList,并选择java.util包下的


02563498909b4a8c97e3940c35e52d83.png


查看add方法


524a358ad8d54214a2f11cae7fe8d921.png


查看扩容方法


16378efee6ec47d5a2e224c337494095.png


不难看出,方法是私有的,不能被修改


3.使用规则


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


  • 成员变量要私有


  • 方法要公开


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


4.总结



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


三、小结


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

相关文章
|
4天前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
18 6
|
6天前
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
21 8
|
3天前
|
IDE Java 测试技术
Java进阶之反射
【7月更文挑战第14天】Java反射机制允许在运行时动态获取类信息、创建对象及调用其方法。它基于`Class`类,让我们能访问类的属性、方法、构造器。例如,通过`Class.forName()`加载类,`Class.newInstance()`创建对象,`Method.invoke()`执行方法。反射广泛应用于动态代理、单元测试、序列化及框架中,提供灵活性但牺牲了性能,且可破坏封装性。IDE的代码补全也是反射的应用之一。在使用时需谨慎,避免对私有成员的不当访问。
13 1
|
6天前
|
Java
Java进阶之函数式编程
Java进阶之函数式编程
14 3
|
10天前
|
JavaScript Java 测试技术
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
29 8
|
10天前
|
JavaScript Java 测试技术
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
20 7
|
10天前
|
JavaScript Java 测试技术
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
28 7
|
10天前
|
安全 Java
Java进阶之泛型
【7月更文挑战第10天】Java泛型,自Java 5引入,旨在提升类型安全和代码重用。通过泛型,如List<String>,可在编译时捕获类型错误,防止ClassCastException。泛型包括泛型类、接口和方法,允许定义参数化类型,如`class className<T>`,并用通配符<?>、extends或super限定边界。类型擦除确保运行时兼容性,但泛型仅做编译时检查。使用泛型能增强类型安全性,减少强制转换,提高性能。
17 1
|
10天前
|
Java
Java进阶之泛型
Java进阶之泛型
8 1
|
10天前
|
Java
Java进阶之异常捕捉处理和错误处理
【7月更文挑战第9天】Java异常处理确保程序在遇到错误时不会崩溃。关键机制包括try-catch-finally,用于捕获(try)、处理(catch)和清理(finally)异常。异常分为检查型(需编译时处理,如IOException)和非检查型(如NullPointerException)。throw用于抛出异常,throws用于声明方法可能抛出的异常。Error表示系统级错误,不可恢复;Exception是可处理的异常,包括检查型和非检查型。自定义异常通过继承Exception实现。Java 7引入try-with-resources自动关闭资源。
9 1