[学习笔记]Java的访问指示符public,protected,private,缺省的作用域

0.引言

Java的访问指示符public,protected,private,缺省可以用来修饰类和方法。

1.作用域如下

public: 其它类都能访问此类或方法

protected: 为继承而生的,子类可以访问父类该修饰的方法

private: 为类自己所用,一般修饰成员变量

缺省: 同一个包内可用(“友好”类)

2.同一个java文件里面若有多个类

(1) 每个编译单元(文件)都只能有一个public 类。每个编译单元有一个公共接口的概念是由那个公共类表
达出来的。根据自己的需要,它可拥有任意多个提供支撑的“友好”类。但若在一个编译单元里使用了多个
public类,编译器就会向我们提示一条出错消息。(即只能有一个是public修饰,其它为缺省)

(2) 可能(但并常见)有一个编译单元根本没有任何公共类。此时,可按自己的意愿任意指定文件名。(即可以都是缺省修饰,即无访问指示符修饰类名)

3.若不愿其他任何人访问那个类

我们现在对于类的访问只有两个选择:“友好的”或者public。若不愿其他任何人访问那个类,可将所有构建器设为private,然后用(singleton)单例模式或者静态方法获得此类的实例

//: Lunch.java
// Demonstrates class access specifiers.
// Make a class effectively private
// with private constructors: 

class Soup {
  private Soup() {}
  // (1) Allow creation via static method:
  public static Soup makeSoup() {
    return new Soup();
  }
  // (2) Create a static object and
  // return a reference upon request.
  // (The "Singleton" pattern):
  private static Soup ps1 = new Soup();
  public static Soup access() {
    return ps1;
  }
  public void f() {}
} 

class Sandwich { // Uses Lunch
  void f() { new Lunch(); }
} 

// Only one public class allowed per file:
public class Lunch {
  void test() {
    // Can‘t do this! Private constructor:
    //! Soup priv1 = new Soup();
    Soup priv2 = Soup.makeSoup();
    Sandwich f1 = new Sandwich();
    Soup.access().f();
  }
} ///:~

4.例外

同一个Java文件中,我们现在对于类的访问只有两个选择:“友好的”或者public,但是如果是内部类,就可以使用protected和private来修饰。

  

时间: 2024-10-18 16:22:56

[学习笔记]Java的访问指示符public,protected,private,缺省的作用域的相关文章

JAVA修饰符类型(public,protected,private,friendly)

JAVA修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包内的不论什么类,及包外的那些继承了此类的子类才干訪问:private的类.类属变量及方法,包内包外的不论什么类均不能訪问:假设一个类.类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的不论什么类都能够訪问它,而包外的不论什么类都不能訪问它(包含包外继承了此类的子类),因此

Ruby中访问控制符public,private,protected区别总结

重点关注private与protected public 默认即为public,全局都可以访问,这个不解释 private C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”.意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法.Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法.因为Ruby的原则是“private意为你不能指定方法接收

C++中public,protected,private访问

总结:1. protected和private的区别在于 ,protected的访问标号限制,能够被派生类的成员函数访问,而private不能2. protected和publice的区别在于,protected的访问限制,使其不能被基类的对象访问. -----------------------------------------------------第一:private, public, protected 访问标号的访问范围.private:只能由1.该类中的函数.2.其友元函数访问.不

C++:继承访问属性(public/protected/private)

? 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: 1 #include<iostream> 2 using namespace std; 3 class Father{ 4 public: 5 Father()=default; 6 void Father_show1(){ 7 cout<<"调用Father类的public方法:Father_show1"<<endl; 8 } 9 protected: 1

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域、static 用法总结

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域.static 用法总结 前言: 从上图可知,程序占用的内存被分了以下几部分. (1).栈区(stack) 存放函数的参数值,局部变量的值等,内存的分配是连续的.栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限 注意:通常栈空间容量比较小,一般是1MB-2MB,所以体积比较大的对象不适合在栈中分配. (2).堆区(heap) 由malloc系列函数或new操作符

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

c++ public protected private 继承

1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象没有访问权限.子类对象没有访问权限,子类内部可以访问 1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限.子类对象和子类内部都没有访问权限 class TestObject{ public: void Function(); void TestPublic(); pr

public, protected, private,internal,protected internal的区别

虽然这个知识比较简单, 但是老是会忘, 写上来, 增强记忆. 在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal.作用范围如下表: 访问修饰符 说明public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问.只限于本项目内访问,其他不能访问.protected inter

php public protected private属性实例详解

php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以访问:private 表示私有的,只有本类内部可以使用:protected 表示受保护的,只有本类或子类或父类中可以访问: <?php//父类class father{ public function a(){ echo "function a"; } private functio