`
sangei
  • 浏览: 329221 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

(转)Java和C#默认访问修饰符

阅读更多
 

这个要看类的位置,

如果类,结构,代理,枚举是外置的,那修饰符只有:public 和 internal,默认是internal。
至于private和protected是用来修饰类的成员。
在外置class前面加private,protected根本不会通过编译,不信你试试?

如果是内置的,就是作为另一个类型的成员,也称内部类型(inner type),这样的话,修饰符可以是全部可用修饰符,默认是private。

举例:
class a {} 类a是internal

class b
{
class a {} 类a是private
}

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

分享到:
评论

相关推荐

    c#和java中的访问修饰符

    知道c#中类和接口等默认修饰符吗?知道其成员的吗?知道各修饰符的作用吗?看看绝对帮到你。。

    在一小时内学会 C#(txt版本)

    你必须知道 C++ 中常用的 public、private 和 protected 修饰符。我将在这里讨论一些 C# 引入的新的修饰符。 readonly readonly 修饰符仅用于修饰类的数据成员。正如其名字说的,一旦它们已经进行了写操作、直接...

    c#学习笔记——学习心得

    一个方法的签名由它的名称以及它的形参的个数、修饰符和类型组成。方法的签名是方法的唯一标识(同一个类中的区别标识)。 方法的重载:是指方法名相同,但参数类型、个数或顺序不同的方法,与返回值无关(同一类或...

    c#学习笔记.txt

    访问修饰符 public private internal protected 指定声明的类型和类型成员的可访问性。 访问不受限制 只有包含该类的成员的类可以访问 只有当前工程可以访问 只有包含该成员的类和继承的类可以访问 abstract...

    Java-Web程序设计题库.doc

    A、break语句 B、while语句 C、if语句 D、for语句 11、类中的成员默认的访问修饰符就是( A )。 A、private B、protected C、public D、空 12、常量使用( C )进行修饰 A、private B、abstract C、final D、static 13...

    Java-Web程序设计题库(2).doc

    A、break语句 B、while语句 C、if语句 D、for语句 11、类中得成员默认得访问修饰符就是( A )。 A、private B、protected C、public D、空 12、常量使用( C )进行修饰 A、private B、abstract ...

    Java-Web程序设计题库(1).doc

    A、break语句B、while语句C、if语句D、for语句 11、类中的成员默认的访问修饰符是( A )。 A、privateB、protectedC、publicD、空 12、常量使用( C )进行修饰 A、privateB、abstractC、finalD、static 13、包含...

    Android 中Lambda表达式的使用实例详解

    Lambda表达式在 Android 中最低兼容到 Android2.3 系统,兼容性还是不错的,Lambda表达式本质上是一种匿名方法,它既没有方法名,也没有访问修饰符和返回值类型,使用它编写的代码将更加简洁易读。 1.Lambda表达式的...

    《ASP.NET程序设计实用教程》配套资料-cd, ppt

     第4章 ASP.NET内置对象和页面配置,介绍了ASP.NET的页面常用修饰符、常用内置对象的使用方法,以及ASP.NET的运行配置文件。  第5章 .NET框架类,介绍了常用框架类的命名控件System.IO、System.Web、...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

     Ivor Horton是撰著Java、C和C++编程语言图书的杰出作家之一。大家一致认为,他的著作独具风格,无论是编程新手,还是经验丰富的编程人员,都很容易理解其内容。在个人实践中,Ivor Horton也是一名系统顾问。他从事...

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...

Global site tag (gtag.js) - Google Analytics