Java常考面试题(二)(转)
序言
昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的
面试题,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。
------WZY
一、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
自己解答:
覆盖:又称作重写, 前提条件:继承。 子类将父类中的某个方法,原封不动的抄下来,方法体中就自己写
注意:子类重写父类的方法,访问修饰符的权限不能低于父类方法的访问修饰符, 其它返回值、方法名、参数,必须一样。
重载:不需要继承,在自己类中,和自己本类中的某个方法名相同,参数不同,其他没有限制, 这就是方法的重载。
参考答案:
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
自我评价:
大概的要点已经答道,语言上面有点欠缺,不精炼。一看就是个菜鸟~
1、重载:方法名相同、参数不相同。 修饰符、返回值无所谓。
2、重写:方法名、参数、返回值都必须相同、修饰符 >= 父类方法修饰符
注意:重写是为了进行多态的使用,多态的好处就是能让代码的维护性能更高。而重载是为了一个方法能根据参数的不同,选择更多的功能。
二、Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
自己解答:
构造函数:方法名和类名相同,并且没有返回值。每个类中默认有一个无参构造函数。
构造函数重载:在构造函数中,参数不同,其他相同, 作用,做一些初始化的操作。
复制构造函数:这个不知道。。。 没遇到过这种需要复制构造函数的情况。
参考答案:
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在
程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。 Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。 Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
自我评价:
总体也答道点上了,复制构造函数那个概念,对C++的学习不深,其实没怎么学,所以不知道
1、构造函数在新对象被创建的时候会调用。每一个类都有构造函数,构造函数的名字跟类名相同,没有返回值,每个类有一个默认的无参构造函数,
2、构造函数的重载:跟方法的重载类似,唯一的不同就是功能不一样,构造函数的重载,增加不同参数,来达到初始化属性的目的。
3、Java支持多继承么?
自己解答:
这个问题,有点傻,学了
java的人都知道, 肯定不知道多继承啊,java是只支持单继承,多实现。我记得C++中就支持多继承。
参考答案:
Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是java中的接口支持多继承,,即一个子接口可以有多个父接口。(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。
自我评价:
只说出表面答案来,不能更深入的讲解,说明自己所储备的知识不够多,而且自己确实不知道接口可以多继承。这个可以记住。
1、java 是支持单继承、多实现
2、实现说的就是一个类实现某个接口,接口中只申明方法,但是没有方法体,接口可以多继承。一个接口继承多个接口,说明该接口扩展更多的功能。
4、接口和抽象类的区别是什么?
自己解答:
接口:接口中只定义方法,方法中没有方法体, 也就是说只是声明有哪些功能,功能具体的实现要靠实现该接口的类去做。关键字interface
抽象类:对一类事物相同的部分抽取出来,可以有具体的方法,也可以有不写方法体的方法。特点,关键字 abstract
区别:
关键字 interface abstract
接口中全是方法的声明,没有方法体 抽象类中可以有方法体,也可以只申明方法,还可以有成员变量。
接口需要实现 implements 抽象类需要继承 extends
实现接口,需要实现接口中所有的方法, 继承抽象类,需要重写抽象类中所有的抽象方法,如果不重写,则该类也还是抽象类。抽象类不能new 对象。
参考答案:
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
也可以参考JDK8中抽象类和接口的区别
自我评价:
看起来好像知道,其实不明白他们两个其中的联系和区别。还有一个理解错了,接口中也能有属性,但是每个变量都声明为 public static final 。也就是常量了
1、接口是最顶级的抽象,抽象类次之。
2、接口中所有的变量都市 public static final 而抽象类中能包含任意类型的变量 接口中所有的方法都是abstract。
3、接口是最顶级的抽象,所以它只声明方法,而没有方法体,而抽象类既可以有方法体的方法,也可以没有,
4、一个类中有抽象方法,则该类一定要是抽象类。而且继承该类的类必须重写抽象方法,
5、abstract只能修饰类和方法,不能修饰属性。
6、一个方法被abstract修饰了,则该方法只能声明,没有方法体。
重新解答:
区别: 三个方面、 关键字、方法、成员变量、其他。
关键字: 接口 interface 抽象类 abstract
接口是最顶级的抽象 抽象类次之
接口中所有的方法都市抽象的,且接口只能被实现,不能被继承,而抽象类中的方法可以是抽象的,也可以不是,抽象的方法都没有方法体
接口的成员变量都市public static final 修饰的 是常量 而抽象类则可以是各种类型。
五、什么是值传递和引用传递?
自己解答:
值传递:针对的是基本数据类型,是把自己的值进来传递
引用传递:针对的是引用数据类型,传递的是地址值,
注意:有一个话说,java中所有的都是值传递,没有引用传递,其实说的是真正的值和引用值(地址值)。
参考答案:
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
一般认为,java内的传递都是值传递
自我评价:
自己解答的不够深入,只是表面上的解答
1、值传递是针对基本引用类型,如果将值赋予另一个a变量,改变a变量的值,原先变量的值并不会因此改变
2、引用传递针对的是引用基本类型,如果将a变量的值赋给b变量,改变b变量的的值,a变量的值也会因此改变,因为传递的是一个地址,一个地址中的值改变了,所有指向该地址的对象的值也会相应的改变
Java常考面试题(二)(转)的更多相关文章
- Java常考面试题(二)
序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...
- Java常考面试题
Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ...
- C/C++常考面试题(二)
网上看到的面经,说是dynamic_cast的实现,和RTTI的相关,这才发现原来对这个概念这么模糊,所以作了这个总结. C/C++常考面试题(二) RTTI(Runtime Type Informa ...
- Java常考面试题整理(二)
21.Iterator和ListIterator的区别是什么? 参考答案: 下面列出了他们的区别: Iterator可以用来遍历Set和List集合,但是ListIterator只能用来遍历List. ...
- 阿里巴巴JAVA常考面试题及汇总答案
一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答: 1.String是字符串常量,StringBuffer和StringB ...
- Java常考面试题(经典)
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...
- Java常考面试题(五)
序言 好好努力. ---WH 一.Iterator和ListIterator的区别是什么? 自我解答: Iterator是针对所有collection来使用的,而看名字ListIterator,顾名思 ...
- Java常考面试题(四)
序言 双十一那天去我女朋友那了,11.11到11.13 漏了两天的内容,今天中午刚回来的,赶紧补一下前两天漏下的博文,我相信,坚持下来,会有成长的,等到出去实习那一天,肯定会很有帮助,会感谢现在自己的 ...
- Java常考面试题(三)
序言 说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言 ...
随机推荐
- MySQL8.0 ROW_NUMBER、RANK、DENSE_RANK窗口函数 分组排序排名
MySQL8.0 (ROW_NUMBER)窗口函数 排名 暂时理解函数意义,后面再进行优化,如果有关变量排序,查看这个大哥的 mysql的分组排序和变量赋值顺序 先查看一个例子: # 按照每科课程分数 ...
- vue学习笔记:Hello Vue
编写简单例子,了解下基本语法 <!DOCTYPE html> <html> <head> <meta charset="utf-8 "&g ...
- PTA的Python练习题(四)
从 第3章-1 3-1.大于身高的平均值 开始 1. 引入列表的概念 a=list(map(int,input().split())) b=sum(a) c=len(a) d=b/c for i in ...
- PTA的Python练习题(一)
最近宅家里没事干,顺便把python给学了.教程和书看了一段时间,但是缺少练习的平台. 想起大一时候练习C语言的PTA平台,就拿来练手了. (因为没有验证码无法提交题目,所以自己用pycharm来做题 ...
- HTML5模板引擎 Thymeleaf 教程(转)
原文:http://www.open-open.com/lib/view/open1383622135586.html Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非 ...
- vs code 本地调试配置
{ "name": "使用本机 Chrome 调试", "type": "chrome", "request& ...
- 「Luogu P3078 [USACO13MAR]扑克牌型Poker Hands」
本题有\(O(N)\)的优秀做法,但是因为在考场上不一定能想到,就来分享一种\(O(N\log_2N)\)的做法.虽然有点慢,但是可以过. 前置芝士 线段树:提高组及以上必备内容,不会的同学可以学习一 ...
- SVN提交失败:Changing file 'XXX' is forbidden by the server;Access to 'XXX' forbidden
解决方案:https://blog.csdn.net/m0_38084243/article/details/81503638 个人分析主要是后者,在SVN服务器上添加上我对本项目的读写权限即可: 添 ...
- iOS性能优化-内存优化
https://blog.csdn.net/a184251289/article/details/82589128 2018年09月10日 14:25:31 xingshao1990 阅读数:328 ...
- 为什么在/etc/profile中设定的环境变量,对子进程可见
系统启动时有个过程是启动初始shell,执行一些固定目录下的脚本,比如/etc/profile.....(系统启动时执行一次),我们在这些文件中添加并导出环境变量 这样shell启动的其它的进程就具备 ...