Java常考面试题(二)
序言
昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了。就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用自己的话说出来,看会不会,不会的话就继续看看,理解理解。
------WH
一、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中所有的都是值传递,没有引用传递,其实说的是真正的值和引用值(地址值)。
参考答案:
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
自我评价:
自己解答的不够深入,只是表面上的解答
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常考面试题(三)
序言 说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言 ...
随机推荐
- Linux Shell 下载网站指定文件
Shell脚本,用来从网站下载指定文件名的文件.先判断本地这个文件是否存在,如果存在则忽略,不存在则从远程服务器上下载,下载成功后本地的批次号累加1,然后使用新的批次号继续下载新文件. #!/bin/ ...
- SSM框架中,配置数据库连接的问题
MySQL数据库版本是8.0.11. 要用驱动:com.mysql.cj.jdbc.Driver 最主要的是数据库的连接url. 搞了半天才把问题搞明白: 数据库url后面要加上参数: jdbc:my ...
- 转载:mysql添加用户、删除用户、授权、修改密码
mysql添加用户.删除用户.授权.修改密码等 MySql中添加用户,新建数据库,用户授权,删除用户,修改密码1.新建用户. //登录MYSQL @>mysql -u root -p @> ...
- layer.js 弹窗组件API文档
基础参数 type title content skin area offset icon btn closeBtn shade shadeClose time id shift maxmin f ...
- Navicatmysql专版
Navicat是非常牛逼的公司在数据库可视化方面,做出许多工具...,可视化,为了更加人性化的操作,远离枯燥无味的黑色窗口 一睹真容 捐献一枚注册码 注册码:NAVH-WK6A-DMVK-DKW3 D ...
- 转: Orz是一个基于Ogre思想的游戏开发架构
Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...
- Git 经常使用命令合集
====== Git 经常使用命令合集 ====== === 1.Git 文档 === Git 中文文档观看地址:http://git.oschina.net/progit/ === ...
- 阿里云设置CDN加速访问OSS文件
快速配置OSS:https://help.aliyun.com/document_detail/31885.html?spm=5176.doc31886.6.97.8iuJo5 快速配置CDN:htt ...
- 轻量级桌面 openbox + tint2 + conky + stalonetray + pcmanfm + xcompmgr
openbox+tint2+pnmixer+conky=轻量级archlinux桌面环境设置备忘 缘起 机器上的Ubuntu 12.04有一段时间没有使用了,最近在用的时候发现频繁死机的情况,开始以为 ...
- Rot13加密算法
Rot13是一种非常简单的替换加密算法,只能加密26个英语字母.方法是:把每个字母用其后第13个字母代替. 因为有26个字母,取其一半13. s = "xrlvf23xfqwsxsqf&qu ...