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

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. [深度学习] Pytorch学习(一)—— torch tensor

    [深度学习] Pytorch学习(一)-- torch tensor 学习笔记 . 记录 分享 . 学习的代码环境:python3.6 torch1.3 vscode+jupyter扩展 #%% im ...

  2. noip复习——逆元

    逆元,即对给定\(a,p\ (a \perp p)\),求\(x\)使得\(ax \equiv 1 \ (\bmod p)\) 逆元可以看做\(a\)在模\(p\)意义下的\(a^{-1}\).因此, ...

  3. asp.net core mvc和angular项目的一些问题

    最近公司布置任务,用asp.net core mvc和angular改写原来的一个用Silverlight做的项目.从来没搞过,找了两本书看了一天,又看了一天代码,大致心里有底了,就开始动手.没想到一 ...

  4. python的一些使用体会

    python刚开始接触,因为刚好有点需求,所以写了点小程序,一点点体会. 优点: 1. os.rename()方法不错,c#就没有这个方法 2.字符串的slice操作不错,取substring有时比较 ...

  5. PythonCrashCourse 第三章习题

    PythonCrashCourse 第三章习题 3.1 将一些朋友的姓名存储在一个列表中,并将其命名为names.依次访问该列表中的每个元素,从而将每个朋友的姓名都打印出来 names = ['lih ...

  6. linux系统相关参数查询(内存,磁盘,CPU)

    1.服务器型号:dmidecode -s system-product-name 出厂日期:dmidecode -s bios-release-date 2.磁盘大小:parted -l 3.物理内存 ...

  7. Javascript模块化编程(一):模块的写法 (转)

    Javascript模块化编程(一):模块的写法 原文作者: 阮一峰 日期: 2012年10月26日 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞 ...

  8. JavaScript学习系列博客_2_JavaScript编写位置

    JavaScript代码一般编写在哪里呢? 看到这个问题,第一个反应就是,JavaScript那当然是编写在<Script></Script>这对标签中啊!然而! 1.可以编写 ...

  9. Linux 资源监控与性能测试

    综合管理 glances 系统情况监控 vmstat 能看到上下文切换,runnable进程个数,uninterrupted进程个数 磁盘IO iostat是磁盘级别监控,iotop进程级别监控,注意 ...

  10. springboot的常用注解

    1. @SpringBootApplication2. @Repository3. @Service4. @RestController5. @Controller6. @Component7. @R ...