记录一个有趣的现象,private修饰的方法子类是访问不了的,且类中所有private修饰的方法都隐式的指定为final(可以对private方法添加final修饰词,但是这并不能给该方法增加任何额外的意义),final修饰的方法是不可以被重写的。但是如果在继承中我们试图"覆盖"一个private方法,似乎是奏效的,而且编译器不会报错。例如:

class Foo{

private final void set() {

System.out.println("f");

}

}

public class Son extends Foo{

public final void set() {

System.out.println("s");

}

public static void main(String[] args) {

Son s = new Son();

s.set();

}

}

编译器没有报错,并且运行后输出s。

覆盖只有在某方法是基类的接口(非interface)的一部分时才会出现。即必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某个方法为private,它就不是基类的接口的一部分。它只是隐藏于类中的程序代码,只不过名称相同而已。但如果在子类中以相同的名称生成一个public,protected或包访问权限方法的话,该方法就不会产生在基类中出现的“仅具有相同名称”的情况。此时,你并没有覆盖该方法,仅是生成了一个新方法。

再看一个例子,只有非private的方法才可以被覆盖

class Son extends Foo{

public void set() {

System.out.println("s");

}

}

public class Foo{

private void set() {

System.out.println("f");

}

public static void main(String[] args) {

Foo s = new Son();

s.set();

}

}

我们期望的是输出s,但是结果输出的f,由于private的方法默认修饰为final方法,而且对子类是屏蔽的,不能被重载。因此,在这种情况下子类的set方法是个非覆盖的新方法。

java中 private final_Java笔记:final与private关键字相关推荐

  1. Java中的public static final来修饰数组与接口变量

    Java中的public static final来修饰数组与接口变量 public static final来修饰数组 final对数组的作用 怎样实现对数组的public static final ...

  2. java中的Static、final、Static final各种用法

    前言 对Static.final.Static final这几个关键词熟悉又陌生? static 加载:static在类加载时初始化(加载)完成 含义:Static意为静态的,但凡被static 修饰 ...

  3. java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字

    Java并发 一.锁 1. 偏向锁 1. 思想背景 来源:HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁 ...

  4. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  5. java中finally意思_Java学习之finally关键字总结

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  6. java中JAO_JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)...

    在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作.然而在Java中除了提供Lock API外还在语法层面上提供了synchronized关键字来实现互斥同步 ...

  7. Java并发编程学习笔记——volatile与synchronized关键字原理及使用

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一.vo ...

  8. Java中访问修饰符public、private、protect、default访问范围

    说明: public: Java语言中访问限制最宽的修饰符,一般称之为"公共的".被其修饰的类.属性以及方法不仅可以跨类访问,而且允许跨                 包(pac ...

  9. Java中Connection方法笔记

    http://www.apihome.cn/api/java/Connection.html public interface Connectionextends Wrapper 与特定数据库的连接( ...

最新文章

  1. R语言包_lubridate
  2. cultureinfo 类 java_System.Globalization.CultureInfo.cs(示例代码)
  3. LeetCode 1464. 数组中两元素的最大乘积
  4. (王道408考研操作系统)第三章内存管理-第一节7:非连续分配管理方式之基本分段管理方式
  5. Mybatis中接口和对应的mapper文件位置配置详解
  6. 苹果cmsv10自适应卡通动漫番剧模板
  7. 徽柏工业机器人_国产工业机器人龙头企业,是这家徽商!
  8. 前端人员必须掌握哪些技术?常见缓存种类有什么?
  9. animate支持的css属性
  10. win gvim erlang 环境配置
  11. 以太坊源码分析(48)p2p-server.go源码分析
  12. 原生js实现表单的正则验证,所有验证都通过后提交按钮才可用
  13. 关于数据分析复购率与回购率的定义
  14. 从零开始(温故而知新)
  15. Android 2.2模拟器调出中文输入法
  16. 10.业余无线电术语
  17. 锂电池电量百分比计算_锂电池电压电量关系
  18. java后台程序员转android 之《三B》 支付宝支付 client join server 及采坑记录
  19. Jetpack架构组件 (一)-- Android Jetpack 简介
  20. 软件许可协议怎么写?

热门文章

  1. 在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson
  2. Java / JEE中的有效日志记录–映射的诊断上下文
  3. 带有Spring的REST的ETag
  4. RabbitMQ播放模块! 构架
  5. 智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...
  6. File类、递归、字节流
  7. mysqls压力测试怎么用_MySQL压力测试工具使用
  8. java 对象的态_Java面向对象-------多态总结
  9. mysql 8.0用doc修改密码_MYSQL8.0修改密码流程
  10. C语言头文件 “ 细节 ”