首页 > 其他分享 >访问修饰符

访问修饰符

时间:2024-08-01 12:57:16浏览次数:7  
标签:子类 修饰符 private 访问 protected public

访问修饰符

目录

访问修饰符是什么

Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员(字段)的可见性和访问级别。

Java提供了四种访问修饰符:

访问修饰符 同一类内 同一包内 不同包的子类 不同包的非子类 适用对象
public 可见 可见 可见 可见 类、接口、变量、方法
protected 可见 可见 可见 不可见 变量、方法
默认 可见 可见 不可见 不可见 类、接口、变量、方法
private 可见 不可见 不可见 不可见 变量、方法
  • public:允许所有类访问。适用于需要公开访问的API、常量类等。
  • private:限制访问仅在类内部。用于实现封装和隐藏实现细节。
  • protected:允许同包类和子类访问。适用于继承结构中的子类扩展和库设计。
  • 默认(包私有):允许同包类访问。适用于包内协作和模块化设计。

public 访问修饰符

public访问修饰符是最宽松的修饰符,它允许被修饰的类、方法或变量在整个程序中被访问。任何其他类,无论是否在同一个包中,都可以访问被public修饰的成员。

使用场景

API设计:当你设计一个库或框架,需要提供一些公共的接口或类供外部使用时,可以使用public修饰符。例如,Java的标准库中很多类如ArrayList、HashMap等都是public的。

常量类:一些定义了常量的类通常也是public的,例如Math类中的常量PI。

示例代码

// Public class
public class Animal {
    // Public method
    public void eat() {
        System.out.println("Animal is eating");
    }
}

在这个例子中,Animal类以及它的eat方法都是public的,这意味着任何其他类都可以创建Animal对象并调用eat方法。

private 访问修饰符

private访问修饰符是最严格的修饰符,它限制被修饰的成员只能在它们所在的类内部访问。其他类甚至是同一个包中的类都无法访问被private修饰的成员。

使用场景

封装:private修饰符是实现封装(encapsulation)的关键。它确保了类的内部实现细节不被外部类依赖,从而可以在不影响外部代码的情况下自由地修改内部实现。

隐藏实现细节:当你不希望某个变量或方法被外部类直接访问或修改时,可以将其声明为private。

示例代码

public class Person {
    // Private field
    private String name;
// Public constructor
public Person(String name) {
    this.name = name;
}
 
// Public method to access private field
public String getName() {
    return name;
}
 
// Private method
private void secretMethod() {
    System.out.println("This is a secret method");
}
    }

在这个例子中,name字段和secretMethod方法都是private的,只有Person类内部的代码可以访问它们。getName方法是public的,提供了一个安全的方式来访问name字段。

protected 访问修饰符

protected访问修饰符介于public和private之间,它允许被修饰的成员在同一个包中的其他类以及所有子类中访问(即使子类在不同的包中)。

使用场景

继承层次结构:当你希望某个类的子类能够访问其某些成员,但不希望这些成员被同包中的非子类访问时,可以使用protected修饰符。

库设计:在设计库时,有时需要让子类能够访问和重写某些方法,以便扩展其功能。

示例代码

public class Animal {
    // Protected field
    protected String type;
// Protected method
protected void makeSound() {
System.out.println("Animal makes a sound");
}
}

public class Dog extends Animal {
    public Dog() {
        type = "Dog";  // Accessing protected field
    }
@Override
 void makeSound() {
System.out.println("Dog barks");
}
}

在这个例子中,type字段和makeSound方法是protected的,Dog类可以访问并重写它们。

默认(包私有)访问修饰符

默认访问修饰符(也称为包私有)是指没有显式声明的访问修饰符。它允许被修饰的成员在同一个包中的其他类中访问,但不能被其他包中的类访问。

使用场景

包内协作:当你希望一组相关的类在同一个包内协作但不希望这些类被包外的类访问时,可以使用默认访问修饰符。

模块化设计:在模块化设计中,可以将模块内部的实现细节隐藏在包内部,而只暴露必要的public接口。

示例代码

class PackagePrivateClass {
    // Package-private field
    int number;
// Package-private method
void displayNumber() {
    System.out.println("Number: " + number);
}
}

在这个例子中,PackagePrivateClass类及其成员是包私有的,只有同一个包中的类才能访问它们。

标签:子类,修饰符,private,访问,protected,public
From: https://www.cnblogs.com/luoyiwen123/p/18336433

相关文章

  • Getter访问器和Setter修改器
    Getter访问器与Setter修改器Getter访问器和Setter修改器是为private修饰的类成员变量提供安全访问的一种方式publicclassMan{privateintage;privateStringname;publicintgetAge(){//Getter访问器returnage;......
  • Getter访问器和Setter访问器
    Getter访问器和Setter访问器Getter访问器和Setter访问器是面向对象编程(OOP)中常见的概念,特别是在使用如Java、C#、Python(通过@property装饰器)等语言时。它们用于封装对象的属性,提供对对象内部状态的访问和修改,同时可以控制这些访问的权限和方式。Getter访问器Getter访问器(也称为......
  • 访问修饰符
    访问修饰符访问修饰符(AccessModifiers)是编程语言中用于控制类、方法、变量等成员的访问权限的关键字。不同的编程语言中,访问修饰符的种类和用法可能有所不同。以下是一些常见编程语言中访问修饰符的概述:Java中的访问修饰符Java中有四种访问修饰符:public:表示公开的,可以被任何......
  • 如何使用 Selenium (python) 访问另一个影子根中影子根中的元素?
    我有以下代码和HTML结构(我不是这方面的专家)。我正在尝试抓取HTML代码末尾的96.00C元素,其路径是:Xpath://*[@id="_grid"]/set-class2/div2/text-binding//text()完整Xpath:/html/body/main/div/div3/div3/......
  • 在一个系统中访问另一个系统的接口
    当我们需要对两个系统的进行数据交互的时候,我们可能需要在一个系统中调用另一个系统的接口来进行数据的交互。下面是在一个系统中调用另一个系统接口的简单例子。被调用系统(系统A)的接口以及配置:后端的端口号:9091被调用的接口:@Controllerpublicclassindex{@Re......
  • 尝试通过Python访问.zip文件中的.gz文件
    我有一个包含大量.gz文件的.zip文件,我需要对其进行处理。我想打开.zip,我可以通过以下代码轻松完成:zf=zipfile.ZipFile("file.zip","r")forgzfileinzf.filelist:withgzip.GzipFile(fileobj=zf.open(gzfile.filename,"r"),mode="r")asf:df......
  • 解决非Spring Bean访问Spring Bean的问题:实用指南
    在非SpringBean类里获取SpringBean,会是什么情况?case1下面这段代码中,PlainClass表示一个普通Java类:publicclassPlainClass{publicvoidfoo1(){TheOtherBeanbean=SpringContextUtils.getBean(TheOtherBean.class);System.out.println(bean);......
  • zookeeper未授权访问(CVE-2014-085)
    漏洞描述默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据漏洞影响ApacheZooKeeper漏洞复现Ap......
  • 三招解锁TNAS便捷访问,一键回溯奥运风采
    巴黎奥运会正火热进行中说起奥运相信很多人都会涌起对08年北京奥运会的无尽回忆那一年,我们怀揣着满腔热情想方设法奔赴北京争相购买可爱的福娃大街小巷回荡着《北京欢迎你》而那届开幕式的壮观景象更是“前无古人,后无来者”场面浩大雄伟气势恢宏高朋满座座无虚席 ......
  • 数据库访问
    文章目录1.数据库访问技术1.1ODBC(OpenDatabaseConnectivity)1.2OLEDB1.3ADO(ActiveXDataObjects)1.4第三方库1.5直接使用数据库的C++API1.6ORM(Object-RelationalMapping)框架2.ODBC2.1ODBC构成2.2ODBC编程步骤1.数据库访问技术在C++编程中,连接数据库......