您的位置:首页 > 编程语言 > Java开发

java 关于初学面向对象的问题三:访问权限等修饰符

2016-04-14 15:01 316 查看
一、访问权限

1、访问权限修饰符一共4种:public、protected、(default)、private。但是为了能与继承等概念分清楚我们应当称这种访问权限为直接访问权限。

public:公开能被所有类
protected:本包内部访问有效,非同包的子类访问有效
(default):默认访问权限,不得显式写出,有的又称之为frindly。仅在本包访问有效

private:仅在本类访问有效
2、访问权限修饰符针对本类对象使用

3、关于继承:

我们说private修饰的属性和方法不能被继承。因该作如下理解:不能 被直接访问的属性和方法不能在其他类中利用对象调取,但是我们有可能通过其他的间接的方法调用这些私有的属性和方法,这是无可厚非的。比如最典型的get/set方法就是这样的。所以我们对继承的理解应该是不能被直接访问的属性和方法不能算作继承了。但是我们可以通过其他的间接方法访问到这些私有的属性和方法。所以我们可以说继承现有类型时,就是创造了新的类,这个新的类型拥有了现有类型的所有成员,尽管被private修饰。

4、构造方法允许私有化,如果私有化将不能在外部类中创建对象,主要用于创建单例对象

5、子类特有的成员父类是不允许访问的

6、被继承的属性,在递归构造对象额过程中同样会为其分配内存空间

二、静态修饰符 static

1、修饰范围:

属性、一般方法、初始化代码块。

不能修饰:局部变量、类、构造方法

2、静态成员:类级别,所有对象共享,访问方式:类名.成员名,不创建对象的情况下调用

普通成员:对象级别,每个对象自有,访问方式:引用.成员名

3、静态方法中只能调用静态成员,非静态成员只能通过对象调用。而非静态方法中则不不受此限制

4、静态修饰规则:

静态方法中不允许使用this,super关键字,不能修饰构造方法
静态方法只能被静态方法覆盖,非静态方法被只能被非静态方法覆盖。即覆盖于被覆盖的方法必须具有相同的静态修饰符
静态方法没有多态。引用调用静态方法时都将调用对象本身所拥有的方法
5、静态在类加中的体现

类加载操作:当Java虚拟机第一次遇到某一个类的时候,通过classpath找到相应的文件,读入这个文件,并就爱那个类的信息保存起来。
类加载会执行初始化代码块,为静态变量分配空间,赋初始值。因为类加载只执行一次,因此静态初始化代码块也将只调用一次。
静态初始化代码块中不能调用类中的非静态成员,但可以调用非静态成员,而普通的初始化代码块则可以访问蓓蕾所有成员,因为初始化代码块在对象创建时都会调用一次。
初始化代码块可以用来初始化属性,final修饰的静态属性可以在静态初始化代码块中完成赋值,因为这将在属性空间分配完成之前赋值。

三、常量修饰符 final

1、final修饰的成分意味着他是最终的,不可再被改变的。他可以修饰属性、变量、方法、类。

2、修饰属性:被修饰的属性将变成常量,他的初始化只能有一次。因此我们只能在两个地方进行初始化

在定义属性的时候赋值
调用构造方法赋值,但是每个构造方法中都必须给final修饰的属性赋值
我们可以在初始化代码块中进行初始化,通常final修饰的属性都会被static修饰,所以需要在静态初始化代码块中赋值
3、修饰局部变量:相当于定义常量,主要用在方法中参数,注意,此处所指变量是指位于栈中的位置。

对于基本数据类型而言,指变量的内容不能被改变
对于引用数据类型而言,指指针的指向不允许被改变,即指针的对象一定,但是对象中的内容是可能被改变的,如果没有被final修饰的话。但是我们在方法内部构造匿名内部类的时候,如果我们要调用改方法的形式参数,那么该形参必须要是final修饰的
4、修饰方法:表示该方法不能被子类重写

5、修饰类:表示该类不能被继承。不能被继承的类谈不上方法覆盖
6、关于方法声明的修饰:[访问权限修饰符][静态修饰符][常量修饰符] 返回值类型 方法名(方法参数)异常抛出 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: