java 修饰符默认_Java和C#默认访问修饰符

C#中:

针对下面几种类型内部成员的访问修饰符:

enum的默认访问修饰符:public。

class的默认为private。

interface默认为public。

struct默认为private。

其中:

public可以被任意存取;

protected只可以被本类和其继承子类存取;

internal只可以被本组合体(Assembly)内所有的类存取,组合体是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往是 “.DLL”或“.EXE”。

protected internal唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。

private只可以被本类所存取。

看:

c# 的访问修饰符是private 还是 internal?

准确的说,不能一概而论。

[MSDN]

Classes and structs that are not nested within other classes or structs can be either public or internal. A type deleted as public is accessible by any other type. A type deleted as internal is only accessible by types within the same assembly. Classes and structs are deleted as internal by default unless the keyword public is added to the class definition, as in the previous example. Class or struct definitions can add the internal keyword to make their access level explicit. Access modifiers do not affect the class or struct itself — it always has access to itself and all of its own members.

类(class)或结构(struct)如果不是在其它类或结构中的话,它的访问类型要不就是internal, 要不就是public;

换句话说,如果它在其它类或结构中的话,则可以为private 或protected等。下面我说的类和结构,如无特殊说明,均指非"类中类"

类或结构的默认访问类型是internal.

类中所有的成员,默认均为private。

[MSDN]

Interfaces, like classes, can be deleted as public or internal types. Unlike classes, interfaces default to internal access. Interface members are always public, and no access modifiers can be applied.

Namespaces and enumeration members are always public, and no access modifiers can be applied.

Delegates have internal access by default.

Any types deleted within a namespace or at the top level of a compilation unit (for example, not within a namespace, class, or struct) are internal by default, but can be made public.

接口默认访问符是internal

接口的成员默认访问修饰符是public,也不可能是其他访问修饰符

命名空间,枚举类型成员默认public,也不可能是其他访问修饰符

委托,默认internal

在命名空间内部或编译单元顶部的所有类型,默认是internal,可以人为改为public。

java

1、Class类的访问权限:

默认:默认可以称为friendly但是,java语言中是没有friendly这 个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。

即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类 (当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。

public:可以供所有的类访问。

说明:

1)、每个编译单元(类文件)都仅能有一个public class 。

2)、public class的名称(包含大小写)必须和其类文件同名。

3)、一个类文件(*.java)中可以不存在public class。

这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作。

4)、class不可以是private和protected。

5)、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的 static的成员(属性和方法)可以办到。

2、类成员变量的访问权限:

public:紧接public的属性任何类都可以访问到。但是从类的封装性上来考 虑将一个类的属性定义成public一般很少使用, 在定义静态常量的时候通畅会这样定义。如:public static final int PAGE_SIZE=10;

private:只有类本身内部的方法可以访问类的private属性,当然内部类也可以访问其外部类的private成员的。(属性和方法)

默认(friendly):包级可见,同一个包内的类可以访问到这个属性但 是从类的封装性特性来说很少这样使用类的属性的。

protected:关键字所处理的是所谓“继承”的观念。对于同一包的其他类,protected=默认,对于不同包的类,如果存在继承关系, 而baseClass存在protected属性,则可以被其自继承,而不同包的其他类

则不能访问类的protected属性。

3、类的成员方法的访问权限:

其从语法角度来讲,这些访问权限控制符作用于类的方法和作用于类的属性上的效果是一样的。

public:所有类可见。

pirvate:只有同一类内部的方法可见,在有就是内部类也可以访问到。

默认(friendly):包内可见。

protected:继承可见。

访问权限存在的理由

1)、“让使用者无法碰触到他们不该碰触的东西。”这些东西仅供类的内部机制使用。将某些成员声明成private,对于使用者来说可以说是一种服 务,

因为这样使用者可以知道哪些是他关注的哪些是不重要的,不需要关注,如此历来对于使用来说降低了对使用对象认识的难度。

2)、(最重要的理由)让程序设计者可以更动class内部运作方式,而无须担心波及到客户端程序。

3)、java的“访问权限修饰符”赋予classes开发者极具有价值的控制能力。 身为classes开发者,如果你的任何改变可以完全不干扰你的使用者,

你便可以安心改变你的底层实现,因为客户端程序员无法访问class的这一部分。

通过今天学习访问权限的问题了解到,接口或者抽象等等策略所谓的“实现隐藏”其根本原因并不是说为了隐藏实现的代码和思路,而是降低使用者的使用 难度,以及从维护角度来说可见范围的控制给程序维护带来了极大的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中带有示例的Math.abs()方法

JavaScript | Math.abs()方法 (JavaScript | Math.abs() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.abs() method, we will learn about the abs() method and its working with examples.…

人脸识别python face_recognize_python2.7使用face_recognition做人脸识别

偶然看到一篇文章,说是可以实时人脸识别,很有兴趣就自己按照文章开始动手人脸识别,但是实现过程中遇到了几个问题这里做个总结,希望可以帮助到大家安装face_recognition这个之前需要先安装编译dlib,如果没有安装dlib&a…

c# reverse_清单 .Reverse()方法,以C#为例

c# reverseC&#xff03;List <T> .Reverse()方法 (C# List<T>.Reverse() Method) List<T>.Reverse() method is used to reverse the all list elements. List <T> .Reverse()方法用于反转所有列表元素。 Syntax: 句法&#xff1a; void List<T&…

cpuinfo详解

cat /proc/cpuinfo processor: 23&#xff1a;超线程技术的虚拟逻辑核第24个 ###一般看最后一个0...23 表示24线程 vendor_id: GenuineIntel&#xff1a;CPU制造商cpu family: 6&#xff1a;CPU产品系列代号model: 44&#xff1a;CPU属于其系列中的哪一代号model name: Intel…

jvm延迟偏向_用于偏向硬币翻转模拟的Python程序

jvm延迟偏向Here, we will be simulating the occurrence coin face i.e. H - HEAD, T - TAIL. Simply we are going to use an inbuilt library called as random to call a random value from given set and thereby we can stimulate the occurrence value by storing the o…

java项目没有bin_WebAPI项目似乎没有将转换后的web.config发布到bin文件夹?

我很擅长.NET配置转换 . 我现在将它们放在用于数据使用的类库和WPF应用程序上 .但是&#xff0c;当我尝试使用ASP.NET WebAPI项目进行设置时&#xff0c;似乎发生了一些奇怪的事情 .配置文件永远不会显示在我的bin目录中&#xff0c;因此web.config始终显示为预先形成的配置文件…

opengl es的射线拾取

2019独角兽企业重金招聘Python工程师标准>>> 在opengl中关于拾取有封装好的选择模式&#xff0c;名字栈&#xff0c;命中记录&#xff0c;实现拾取的功能&#xff0c;相对容易一些。但是到了opengl es里面就比较倒霉了&#xff0c;因为opengl es是opengl的简化版&am…

java timezone_Java TimeZone useDaylightTime()方法与示例

java timezoneTimeZone类useDaylightTime()方法 (TimeZone Class useDaylightTime() method) useDaylightTime() method is available in java.util package. useDaylightTime()方法在java.util包中可用。 useDaylightTime() method is used to check whether this time zone u…

视觉学习(4) —— 添加地址传递数据

Modbus Slave 选择一个地址右键&#xff0c;选择发送的数据类型 视觉软件 一、添加地址 当地址为100时&#xff0c;先将首地址改为100&#xff0c;第0个地址为100&#xff0c;第1个地址为101&#xff0c;往后累加 若想使用100—150的地址&#xff0c;即首地址为100&#xff…

某个JAVA类断点无效_解决eclipse中断点调试不起作用的问题

最近几天&#xff0c;遇到了一个问题&#xff0c;就是在eclipse中进行断点调试程序到时候&#xff0c;跟踪不到我设置的断点。困惑了很久&#xff0c;在网上也查阅了很多资料&#xff0c;都没能解决我的问题。今天早上&#xff0c;我试着把eclipse的工作空间重新换了一个&#…

jquery中阻止事件冒泡的方法

2019独角兽企业重金招聘Python工程师标准>>> 根据《jquery基础教程》 第一种方法&#xff1a;判断事件的“直接”目标是否是自身&#xff0c;如果不是自身&#xff0c;不予处理 $(div.outter).click(function(event) {if (event.target this) {$(p).css(color, red…

java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

一、需求分析1.1 个人信息学号、姓名、性别、年级、系别、专业、出生日期、联系方式、个性签名、地址、照片。1.2 基本功能要求管理员信息管理登录、注销功能修改密码功能部落成员信息管理添加成员删除成员修改成员信息按条件查找筛选成员1.3 高级特性管理员权限管理成员信息包…

Java System类loadLibrary()方法与示例

系统类loadLibrary()方法 (System class loadLibrary() method) loadLibrary() method is available in java.lang package. loadLibrary()方法在java.lang包中可用。 loadLibrary() method is used to load the library with the given parameter named library_name(library …

CCF201509-2 日期计算(100分)

试题编号&#xff1a; 201509-2 试题名称&#xff1a; 日期计算 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述给定一个年份y和一个整数d&#xff0c;问这一年的第d天是几月几日&#xff1f;注意闰年的2月有29天。满足下面条件之一的…

Java StringBuilder trimToSize()方法与示例

StringBuilder类trimToSize()方法 (StringBuilder Class trimToSize() method) trimToSize() method is available in java.lang package. trimToSize()方法在java.lang包中可用。 trimToSize() method is used to minimize storage used for the characters (i.e. if the init…

第一百四十一节,JavaScript,封装库--DOM加载

JavaScript&#xff0c;封装库--DOM加载 DOM加载&#xff0c;跨浏览器封装DOM加载&#xff0c;当网页文档结构加载完毕后执行函数&#xff0c;不等待图片音频视频等文件加载完毕 /** dom_jia_zai()函数&#xff0c;DOM页面加载函数&#xff0c;等待页面结构加载完毕后就执行函数…

java 使用接口便于维护程序_Java初学——面向对象接口的应用

一、接口1.什么是接口接口是比抽象类更抽象的定义&#xff0c;接口不可以被实例化 实现类必须实现接口的所有方法 实现类可以实现多个接口 、多个接口使用逗号隔开 接口中的变量都是静态常量(public static final) 程序设计时面向接口的约定而不考虑具体实现 。2.为什么使用接口…

Java ResourceBundle getLocale()方法与示例

ResourceBundle类的getLocale()方法 (ResourceBundle Class getLocale() method) getLocale() method is available in java.util package. getLocale()方法在java.util包中可用。 getLocale() method is used to get the locale of this ResourceBundle. getLocale()方法用于获…

centos下安装pip时失败:

2019独角兽企业重金招聘Python工程师标准>>> [rootwfm ~]# yum -y install pip Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.tuna.tsinghua…