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

访问权限修饰符

public和private是访问权限修饰符,用于控制外界对类内部成员的访问。
public:表明对象成员是完全共有的,外界可以随意访问。
private:表明对象成员是完全私有的,不容许外界的任何访问。

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

类成员变化修饰符

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

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

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

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

1
2
3
4
5
6
7
8
9
10
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不能用于修饰构造方法。

[转] Java中public,private,final,static等概念的解读的更多相关文章

  1. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  2. JAVA中abstract,interface,final,static语法

    转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract     1,只要有一个或一个以上抽象方法的 ...

  3. java中public private protected default的区别

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  4. java中public与private还有protect的区别

    java中public与private还有protect的区别 总是忘记.

  5. Java 中常见的 final 类

    Java 中常见的 final 类 java.lang 包 public final class Boolean extends Object implements Serializable, Com ...

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

    作为刚入门Java的小白,对于public,private,final,static等概念总是搞不清楚,到底都代表着什么,这里做一个简单的梳理,和大家分享,若有错误请指正,谢谢~ 访问权限修饰符 pu ...

  7. [Java] public, private, final and basic rules for naming.

    1. Access: public, private, protected public: Any other class can access a public field or method. ( ...

  8. 在java中public void与public static void有什么区别 ?

    public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用:public static void 修饰是静态方法,属于类,使用类名.方法名直接调用 ...

  9. 在java中public void与public static void区别

    static 方法可以被main方法直接调用,而非static方法不可以.因为static方法是属于类的,是类方法.可以通过类名.方法名直接调用.而非static方法必须等对象被new出来以后才能使用 ...

随机推荐

  1. idea常用快捷键及自定义快捷键汇总

    以下都是挨个进行验证过的 生成get和set方法为:alt+insert 自动补全返回值,自动补全变量名称和属性名称:ctrl+alt+v 输入System.out.println()的快捷方法是:输 ...

  2. Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.

    1.菜单 project-options-linker-misc controls加入 --entry Reset_Handler --first __Vectors 2.导入startup_stm3 ...

  3. 绘图QPainter-画刷

    Qt提供的画刷风格: Qt.TexturePattern   自定义图像画刷 线性渐变 QLinearGradientPattern QLinearGradient需要传入的参数为需要进行渐变的区域坐 ...

  4. CentOS6.8配置SonarQube Scanner配合SonarQube使用

    下载最新的SonarQube Scanner压缩包  https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner ...

  5. jquery选择器最后一个,倒数第二个元素

    <div> <p>1</p> <p>2</p> <p>3</p> <p>4</p> < ...

  6. SLAM学习资料汇总

    转自 http://www.cnblogs.com/wenhust/   书籍: 1.必读经典 Thrun S, Burgard W, Fox D. <Probabilistic robotic ...

  7. 【转】Python流程控制语句

    [转]Python流程控制语句 人们常说人生就是一个不断做选择题的过程:有的人没得选,只有一条路能走:有的人好一点,可以二选一:有些能力好或者家境好的人,可以有更多的选择:还有一些人在人生的迷茫期会在 ...

  8. 【转】Windows下安装python2和python3双版本

    [转]Windows下安装python2和python3双版本 现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里 ...

  9. win10 + ubuntu双系统详细安装过程

    由于搞深度学习,电脑跟不上,换了一台神舟战神Z8,于是装一个ubuntu双系统,没想到几乎花了一天,还花了80个软妹币找人帮忙,蓝瘦,现在写下来供大家参考: 不得不说,win10 + ubuntu双系 ...

  10. Python3学习笔记24-操作文件和目录

    环境变量 在操作系统中定义的环境变量,全部保存在os.environ这个变量中,可以直接查看: import os print(os.environ) 操作文件和目录 操作文件和目录的函数一部分放在o ...