访问指示符

1、Java访问指示符: friendly,public,private,protected

   Java访问指示符都置于数据成员和方法的最前面。

(1)、friendly:包中有效。

     a、不指定访问指示符,默认就是friendly.

     b、当前包内的其他所有类都能访问friendly 成员和方法,但对包外的所有类

来说,这些成员却是“私有”(Private)的,外界不得访问。

(2)、public:接口访问。

     a、在public后面的成员声明适用于所有地方的类内部、方法内部访问此对象

方法。

     b、默认包:处于同一个目录下的.class,没有定义package,这个目录就是这

些.class的一个默认包。

(3)、private:不能接触!

     a、private关键字意味着除非那个特定的类,而且从那个类的方法里,否则没

有人能访问那个成员。

(4)、protected:包内+子类可以访问。

(5)、protected类型和友好类型的区别体现在继承中:若子类和父类在同一个包

中,子类会继承public、protected、友好类型的变量和方法;若子类和父类不在同

一个包中,子类只会继承public、protected类型的变量和方法,而不会继承友好类

型的成员变量和方法。

(6)、基类的私有类型可以继承到子类,但子类不可以访问父类的private成员,只

能通过父类原有的方法对该private方法函数进行使用。(其实这是废话)


 

2、类访问

    (1)、每个编译单元(文件)都只能有一个public类。每个编译单元有一个公共

接口的概念是由那个公共类表达出来的。根据自己的需要,它可拥有任意多个提供

支撑的“友好”类。但若在一个编译单元里使用了多个public类,编译器就会向我

们提示一条出错消息。

    (2)、public类的名字必须与包含了编译单元的那个文件的名字完全相符,甚至

包括它的大小写形式。

    (3)、可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。

    (4)、对于类的访问只有两个选择:“友好的”或者public。若不愿其他任何人

访问那个类,可将所有构建器设为private。这样一来,在类的一个static成员内

部,除自己之外的其他所有人都无法创建属于那个类的一个对象。也就是说,可以将

类的构造函数设置为private,这样,其他类就不可以直接创建该类的对象,但可以在

该类的内部设置静态函数,用于生成该类的对象,这样,其他类就可以通过该静态方法

生成该类的对象.

### 不同编程语言中的访问修饰符比较 在面向对象编程中,访问修饰符用于控制类成员(字段、方法等)的可见性和可访问范围。不同的编程语言提供了多种访问修饰符来实现这一目标。 #### Java 中的访问修饰符 Java 提供了四种主要的访问级别: - **public**: 成员可以被任何其他类访问[^2]。 - **private**: 只能在定义它的类内部访问,外部类无法直接访问 private 成员。 - **protected**: 类本身及其子类可以在同一包内访问 protected 成员;如果不在同一个包,则只有子类能访问这些成员。 - **默认 (package-private)**: 当未指定任何显式的访问修饰符时,默认情况下该成员仅在同一包内的类之间共享。 ```java class AccessModifiersExample { public String publicField; private int privateField; protected double protectedField; } ``` #### C# 中的访问修饰符 C# 支持五种基本类型的访问修饰符: - **public** - **private** - **protected** - **internal**:限定于当前程序集内的所有文件和类可用。 - **protected internal**:既限定了保护级别的继承关系又限定了程序集边界。 ```csharp using System; namespace AccessModifierDemo { class Program { static void Main(string[] args) { var example = new ExampleClass(); } } class ExampleClass { public string PublicProperty { get; set; } = "Public"; private string PrivateProperty { get; set; } = "Private"; protected string ProtectedProperty { get; set; } = "Protected"; internal string InternalProperty { get; set; } = "Internal"; protected internal string ProtectedInternalProperty { get; set; } = "Protected Internal"; } } ``` #### Python 的访问控制约定 Python 并不严格区分私有和公有的概念,而是通过命名惯例来进行暗示性的封装: - 前缀单下划线 `_` 表示“受保护”的属性或方法; - 使用双下划线 `__` 开头的名字会被名称改写机制处理成更复杂的形式,从而达到近似私有的效果。 ```python class MyClass: def __init__(self): self.public_var = 'This is public' self._protected_var = 'This should be treated as protected' # 单下划线开头表示弱内部使用指示 self.__private_var = 'This is considered private due to name mangling' def display_vars(self): print(f"Public variable: {self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值