首页 > 编程语言 >Java 中的访问权限

Java 中的访问权限

时间:2024-10-18 22:19:08浏览次数:3  
标签:Java 子类 GPA private 访问 权限 public

文章目录

前言

在 Java 编程中,访问权限的控制是非常重要的一部分,它决定了类、方法和变量在不同场景下的可见性和可访问性。合理地使用访问权限可以提高代码的安全性、可维护性和可扩展性。

一、Java 中的四种访问权限级别

1. public(公共访问权限):

  • 这是最宽松的访问权限级别。被public修饰的类、方法和变量可以被任何其他类访问,无论它们是否在同一个包中。
  • 例如,一个public类可以被项目中的任何其他类实例化和使用。public方法可以被任何地方的代码调用。

2. protected(受保护访问权限):

  • protected访问权限主要在继承关系中起作用。被protected修饰的成员可以被同一个包中的类访问,也可以被不同包中的子类访问。
  • 对于子类来说,即使不在同一个包中,也可以访问父类的protected成员,这为子类提供了一定的灵活性来扩展和定制父类的功能。
  • 但需要注意的是,非子类在不同包中无法访问protected成员。

3. 默认访问权限(也称为包访问权限或友好访问权限):

  • 当没有显式地指定访问修饰符时,成员就具有默认访问权限。
  • 具有默认访问权限的成员只能被同一个包中的其他类访问。在不同包中的类无法访问这些成员。
  • 这种访问权限适用于在同一个包内进行协作开发,假设开发人员对同一个包内的代码有较好的理解和控制。

4. private(私有访问权限):

  • private是最严格的访问权限级别。被private修饰的成员只能在其所属的类内部被访问。

  • 其他任何类,即使是子类,也无法直接访问private成员。

  • 用途:通常用于封装类的内部实现细节,防止外部代码意外修改或错误使用这些敏感信息。
    举个例子,定义一个Student类,属性有name、age(父类的私有属性)、GPA(私有属性),行为有getGPA和setGPA

父类

package com.csdn.p1;

public class People {
    String name;
    private int age;
    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
子类
package com.csdn.p1;

public class Student extends People{
    private double GPA;
    public Student(String name, int age,double GPA) {
        super(name, age);
        this.GPA = GPA;
    }
    public double getGPA() {
        return GPA;
    }
    public void setGPA(double GPA) {
        this.GPA = GPA;
    }
}

主程序

package com.csdn.p1;

public class Test {
    public static void main(String[] args) {
        Student lihua=new Student("李华",18,4.0);
//不能通过对象直接调用属性  java: GPA 在 com.csdn.p1.Student 中是 private 访问控制
//        System.out.println(lihua.GPA);
//        也不能直接更改属性值
//        lihua.GPA=4.1;
//        一般通过调用方法,来实现对私有属性的修改与查看
        System.out.println(lihua.getGPA());
        lihua.setGPA(4.1);
        System.out.println(lihua.getGPA());
    }
}

二、访问权限的重要性

  1. 安全性:通过限制对敏感数据和关键方法的访问,可以防止外部代码的恶意修改或错误使用,提高程序的安全性。

    • 例如,将一个表示用户密码的变量设置为private,并通过公共的方法来进行密码的验证和修改,可以确保密码不会被随意访问和篡改。
  2. 可维护性:合理的访问权限控制可以使代码的结构更加清晰,便于理解和维护。

    • 当一个类的内部实现细节被封装在private成员中时,外部代码不需要了解这些细节,只需要通过公共的接口来使用这个类。这样,当内部实现发生变化时,只需要修改类的内部代码,而不会影响到外部的使用。
  3. 可扩展性:在面向对象编程中,访问权限的控制为代码的扩展提供了灵活性。

    • 子类可以根据需要访问父类的protected成员来进行扩展和定制,同时又不会破坏父类的封装性。而public成员则可以作为对外提供的稳定接口,方便其他类进行交互。

总结

总之,Java 中的访问权限控制是一种强大的工具,它可以帮助我们构建更加安全、可维护和可扩展的软件系统。在实际编程中,我们应该根据具体的需求合理地选择访问权限级别,以实现最佳的代码质量和设计。
注:因为代码不太好展示这个内容,所以仅介绍了private权限

标签:Java,子类,GPA,private,访问,权限,public
From: https://blog.csdn.net/2401_85464956/article/details/142891173

相关文章

  • 【Java SE 】类和对象详解
     ......
  • JavaWeb基于ssm的校园一卡通密钥管理系统(001)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:Vue2后端框架:SSM3、项目图片4、演示视频JavaWeb基于ssm的校园一卡通密钥管理系统(001)......
  • (附论文)JavaWeb基于ssm的爱尚美家家具购物网站系统(002)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:JSP后端框架:SSM3、项目图片4、演示视频(附论文)JavaWeb基于ssm的爱尚美家家具购物网站......
  • java_day16_IO、序列化
    一、IO流IO流划分IO流【输入输出流】:按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】字节流【万能流】:字节输入流:InputStream【抽象类】-......
  • (附论文)JavaWeb基于ssm的高校毕业设计信息管理系统(054)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:Vue2后端框架:SSM3、项目图片4、演示视频(附论文)JavaWeb基于ssm的高校毕业设计信息管理......
  • 计算机毕业设计 | java swing 销售管理系统(附源码)
    1,概述1.1选题背景近几年来,传统商业与电商似乎是水火不容,大有不是你死便是我活的劲头。一直以来舆论都是一边倒的电商将迅速取代传统零售的论调,然而几年过去,电商的发展确实值得侧目,但传统商业虽然受到不小的影响,也依然顽强地挺立。事实上,就零售市场总规模而言,仍然是实体......
  • Java方法使用的细节
    在Java中,方法是一段可重用的逻辑代码块,用于执行特定的任务。以下是关于Java方法使用的一些细节:方法声明:方法应该先声明,再调用。方法的声明包括方法名、参数列表、返回类型和方法体。方法名应该以小写字母开头,并采用驼峰命名法。参数列表包括参数的类型和名称,多个参数之间用逗......
  • Windows环境Jupyter Notebook无法访问npm和node(暂未解决)
    Windows环境JupyterNotebook无法访问npm和nodecontentTheissuemayarisefromusingNode.jsandnpmthroughNVM(NodeVersionManager),whichinstallstheminuser-specificdirectories.Whilethissetupworks,JupyterNotebookorCondamightnotcorrectlydet......
  • Java 初学 day13
    day13数据结构1、栈栈:入口和出口是一个反向,且取出的顺序是先进后出。数据进入栈中叫入栈也叫压栈,数据从栈中被取出叫出栈也叫弹栈栈数据结构的特点:先进后出场景:将A,B,C按顺序存入栈中并取出存储的顺序:ABC取出的顺序:CBA2、队列队列:入口和出口是反方向的,且取出的顺序是......
  • javascript-类型
    1.number使用64位浮点数表示范围+-1.797*10(308次方),+-5*10(-324次方),相当于C++的double整数-2(53次方)2(53次方)十六进制0x开头例0xff八进制0o开头0io377二进制0b开头使用e表示浮点数6.02e231.47e-322.数的计算,在math类中有很多方法。3.没有上溢,下溢。但有无限大无......