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




本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/634345,如需转载请自行联系原作者

相关文章
|
24天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
4月前
|
存储
JavaWeb如何获取当前访问IP
JavaWeb如何获取当前访问IP
83 0
|
8天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
10天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
1月前
|
Java
Java包及访问限定
Java包及访问限定
8 0
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问
|
1月前
|
存储 人工智能 Java
Java的数组访问
Java的数组访问
13 0
|
2月前
|
缓存 Java 程序员
深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏
ava 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组: 访问修饰符: public: 意味着代码对所有类可访问。 private: 意味着代码只能在声明的类内部访问。 default: 意味着代码只能在同一包中访问。 protected: 意味着代码在同一包和子类中可访问。 非访问修饰符: final: 意味着类不能被继承,属性和方法不能被重写。 static: 意味着属性和方法属于类,而不属于对象。 abstract: 意味着类不能用于创建对象,方法没有主体,必须由子类提供。 transient: 意味着在序列化包含它们的对象时,属性和方法将被跳过。 sync
117 0
|
3月前
|
程序员 C#
C# 面向对象编程进阶:构造函数详解与访问修饰符应用
构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值
47 1