Java中public,private,final,static等概念的解读

做为刚入门Java的小白,对于public,private,final,static等概念老是搞不清楚,到底都表明着什么,这里作一个简单的梳理,和你们分享,如有错误请指正,谢谢~html

访问权限修饰符java

public和private是访问权限修饰符,用于控制外界对类内部成员的访问。
public:代表对象成员是彻底共有的,外界能够随意访问。
private:代表对象成员是彻底私有的,不允许外界的任何访问。ide

具体关于public,private的内容请移步:Java对象成员的封装,  进一步有关protected的内容请移步:Java继承函数

 

类成员变化修饰符spa

static和final是控制类成员变化的修饰符。code

static:静态成员修饰符,其修饰的静态变量脱离具体对象独立存在,在内存中以后一份拷贝,全部的对象都公用这一个存储空间,因此对static修饰的静态变量进行的修改对该类的全部对象都起做用。static修饰的静态函数表明全部对象的统一操做,只能调用静态变量。static是针对面向对象中的“多态”而提出来的,static修饰的静态成员不存在多态性。htm

final:final用来修饰方法和属性表示特殊的意义。修饰方法时表示方法不能被重写;修饰属性时表示属性不能被改变,这里属性又分为对象和基本类型,修饰基本类型表示基本类型赋值之后不能再被赋值,修饰对象表示这个属性不能再指向其余对象(引用不变),可是他指向的这个对象自己仍是能够被改变的。对象

既然final方法不可重写,那下面这段程序是否有错呢?blog

 

class Base {
    private final void method() {
        System.out.println("In Base...");
    }
}
class Sub extends Base {
    public void method() {
        System.out.println("In Sub...");
    }
}        

答案: 正确的继承

使用final关键字能够声明类、成员变量和成员方法,一经声明,便不可继承、不可修改和不能覆盖。

本例中,基类方法 是private ,他在子类中是不可见的,故子类中的 同名方法 再也不是覆盖,至关于一个新的方法名

这种状况比较特殊,书上说 若是子类中的一个方法与它超类中的方法有相同的方法名和参数签名,称子类中的方法覆盖(override)超类中的方法。 这种说法是不严密的。

额外小知识:

final方法不能被子类覆盖。编译器在调用final方法时会转入内嵌机制(直接将方法主体插入到调用处),大大提升执行效率(50%左右)。API类中的许多方法,如Object类中的getClass方法为final方法。
说明:final不能用于修饰构造方法

相关文章
相关标签/搜索