我们先用提干两个修饰词中的任意一个创建一个类

package components.javaTest.day4_20200910;

/**
* Question004:
* java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?
*/
public final class AbstractAndFinal {
}

package components.javaTest.day4_20200910;

/**
* Question004:
* java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?
*/
public abstract class AbstractAndFinal {
}

可见任意一个修饰符单独修饰时,没问题


接下来我们尝试两个组合使用

package components.javaTest.day4_20200910;

/**
* Question004:
* java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?
*/
public final abstract class AbstractAndFinal {
}

or

package components.javaTest.day4_20200910;

/**
* Question004:
* java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?
*/
public abstract final class AbstractAndFinal {
}


可以看到编译器提示报错了——》illegal combination of modifiers:'final' and 'abstract'

  所以改题答案为:
  否(一个类上不可以同时用abstract和final进行修饰)

WHY?

至于为什么不能同时加以修饰?在使用一个东西之前,我们如果有时间和精力的话,最好先了解下这个东西到底是拿来干哈子的。所以,我们先来看看这两个修饰词各自的含义及其用法。

abstract

含义:

抽象的

用法:

可以作用于:
1.类
2.方法

1.作用在类时:

表示抽象类,不能被实例化

2.作用在方法时:

表示抽象方法,没有具体实现


final

含义:

Java中的final关键字根据不同的上下文环境,会存在细微的差别(出于设计或者出于开发效率的角度考虑),但它通常代表的意思为:“无法改变的”

用法:

可以作用于:
1.变量
2.方法
3.类

1.作用在变量时有可能表示:

A.编译时常量,永远不改变

B.运行时被初始化的值,在初始化之后都不会被改变

2.作用在方法时有可能表示:

A.防止任何继承类修改它的含义,即锁定方法,以免【出于设计的考虑】

  父类如果有个final修饰的say()方法,这时,子类就不允许出现重写的say()方法(如果想方法名不变,可以选择重载的思路)

B.在java早期实现中,final修饰的方法就是同意编译器将针对该方法的所有调用都转为内嵌调用【出于效率的考虑-至于里面的道道,还得进一步了解,但在这里我们暂且先大致了解其用法】

3.作用在类时表示:

该类无法被继承

我们可以这么理解:

  abstract主要目的是想让一个实现类去具体实现,而final最主要是一种约束,不想让其他人来修改它的实现,两者相互矛盾。所以不能共存。


非  淡  泊  无  以  明  志

非 宁 静 无 以 致 远 !

java面试题0004-在一个类上是否可以用abstract和final同时加以修饰?的更多相关文章

  1. 115个Java面试题和答案(上)

    转自:http://www.importnew.com/10980.html 本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的 ...

  2. java中重载一定在一个类里面吗?

    虽然这些概念在翻译成中文的过程中,有很多不同的翻译方式但本质上只有两种说法,就是Override和Overload其中,Overload一般都被翻译成重载而Override的翻译就乱七八糟了,所谓覆盖 ...

  3. java面试题之Thread类中的start()和run()方法有什么区别

    start()方法被用来启动新创建的线程,而且start()内部调用了run()方法, 区别: 当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动: start()方法才会启动新 ...

  4. 2018年最新JAVA面试题总结之框架(4)

    转自于:https://zhuanlan.zhihu.com/p/40098726 1.谈谈对spring框架的了解 ,spring有什么作用(IOC,AOP),spring的核心是什么?回答:Spr ...

  5. 整理+学习《骆昊-Java面试题全集(上)》

    ★可以关注微信公众号,了解更多技术和行业信息 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不 ...

  6. Java面试题全集(上)转载

    Java面试题全集(上)   2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是 ...

  7. Java 类加载机制(阿里面试题)-何时初始化类

    (1)阿里的面试官问我,可以不可以自己写个String类 答案:不可以,因为 根据类加载的双亲委派机制,会去加载父类,父类发现冲突了String就不再加载了; (2)能否在加载类的时候,对类的字节码进 ...

  8. 史上最全Java面试题整理(附参考答案)

    下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来 ...

  9. Java面试题全集(上)

    2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...

随机推荐

  1. akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?

    在讨论lagom之前,先从遇到的需求开始介绍:现代企业的it系统变得越来越多元化.复杂化了.线上.线下各种系统必须用某种方式集成在一起.从各种it系统的基本共性分析:最明显的特征应该是后台数据库的角色 ...

  2. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  3. 用WindowsAPI实现文件复制功能

    用WindowsAPI实现文件复制功能 1. c代码 注释也在里面 文件名为 copyfile.c 运行出来的exe为 copyfile.exe #include <windows.h> ...

  4. 第一个Mybatis

    第一个Mybatis 思路:搭建环境-->导入Mybatis-->编写代码-->测试 1.搭建环境 新建maven工程,配置xml文件 <?xml version=" ...

  5. 笔记:Linux下软件的安装、CentOS更新yum源、LAMP环境搭建、kali软件管理

    一.Linux下软件的安装 方式:yum源 / rpm /源码安装 1.yum:(帮助管理员解决依赖关系) yum是通过分析rpm的包头数据后,根据各种软件的相关性质做出属性相对应的解决方案,然后可以 ...

  6. 使用pip安装模块,出现Cannot unpack file xxx的问题的解决

    在windows下使用pip 豆瓣源安装gevent时出现错误 解决办法: pip install -i https://pypi.douban.com/simple/ --trusted-host ...

  7. Python之运维

    这几日一直研究运维监控的事情,有次看见有一个脚本写的还不错,如今已经找不到地址了 就只能用Python代替shell了 其中原理是 监控 /proc/下的各种文件,/proc/ 顾名思义其为进程的文件 ...

  8. mr原理简单分析

    背景 又是一个周末一天一天的过的好快,今天的任务干啥呢,索引总结一些mr吧,因为前两天有面试问过我?我当时也是简单说了一下,毕竟现在写mr程序的应该很少很少了,废话不说了,结合官网和自己理解写起. 官 ...

  9. Java数据结构——根据遍历结果构造二叉树

    一.已知前序.中序.后序遍历结果的其中两种,还原二叉树. ①已知前序遍历结果:1,2,4,5,3,6,7 中序遍历结果:4,2,5,1,6,3,7还原二叉树后BFS出结果. TreeNode.java ...

  10. Tensorflow2(二)tf.data输入模块

    代码和其他资料在 github 一.tf.data模块 数据分割 import tensorflow as tf dataset = tf.data.Dataset.from_tensor_slice ...