Java面向对象面试题及答案.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Java面向对象面试题及答案

1.什么是封装?除了用private修饰字段,封装还需要注意什么?

答案:封装本质是“隐藏内部细节,暴露安全接口”,核心目的是避免外部直接操作对象内部状态导致不可控问题。

除了用private修饰字段(禁止外部直接访问),还需要:

提供public的get/set方法作为访问入口,且在方法中加入逻辑校验(比如年龄字段setAge()时,判断参数是否在0-150之间,非法值直接抛异常);

避免在get/set方法中暴露过多细节(比如不要返回内部集合的原引用,应返回副本,防止外部修改集合内容);

核心业务逻辑封装在类内部方法中,外部只需调用方法,无需关心实现(比如User类的register()方法,内部包含手机号校验、密码加密,外部只需传参数调用)。

2.子类继承父类时,构造方法的调用顺序是怎样的?如果父类没有无参构造,子类会报错吗?

答案:调用顺序是“先父类构造,再子类构造”。

具体流程:子类构造方法执行时,会先隐式调用父类的无参构造(相当于第一行默认加了super()),父类构造执行完后,才执行子类构造的代码。

如果父类没有无参构造(比如父类只写了带参构造Person(Stringname)),子类会直接编译报错。因为子类默认要调用父类无参构造,但父类不存在该构造,此时必须在子类构造中显式用super(参数)调用父类的带参构造,且super()必须写在子类构造的第一行。

示例:

classPerson{

//父类无无参构造,只有带参构造

publicPerson(Stringname){}

}

//子类必须显式调用父类带参构造

classStudentextendsPerson{

publicStudent(Stringname){

super(name);//不写这行就报错

}

}

3.Java的多态怎么实现?除了重写,还有其他方式吗?

答案:多态核心是“同一行为,不同实现”,实现需满足三个条件:继承(或实现接口)、重写、父类/接口引用指向子类对象。

常见实现方式有两种:

继承+重写(运行时多态):比如父类Animal有方法eat(),子类Cat重写eat()为“吃猫粮”,Dog重写为“吃狗粮”,声明Animala=newCat()时,调用a.eat()会执行Cat的实现;

接口+实现(运行时多态):比如接口Shape有draw()方法,Circle和Square分别实现draw(),声明Shapes=newCircle(),调用s.draw()会执行Circle的实现;

另外,方法重载(Overload)是“编译时多态”,虽然不算严格意义的面向对象多态,但也是Java中“同一方法名不同行为”的实现方式(比如Math.abs()可以接收int、long等不同参数,编译时就确定调用哪个方法)。

4.接口和抽象类的区别?实际开发中怎么选?

答案:核心区别在“设计定位”——接口是“行为契约”,抽象类是“模板骨架”:

维度

接口

抽象类

方法

Java8前全是抽象方法,后可加default/static方法

可包含抽象方法和具体实现方法

字段

只能是publicstaticfinal常量

可包含任意修饰符的字段

继承/实现

一个类可实现多个接口

一个类只能继承一个抽象类

设计目的

定义“能做什么”,解耦行为与实现

定义“是什么”,复用共性实现

实际选择场景:

若多个不相关的类需要统一行为(比如“可序列化”“可比较”),用接口(比如Serializable、Comparable);

若多个相关的类有共性实现(比如ArrayList、LinkedList都属于List,有共同的size()、isEmpty()实现),用抽象类(比如AbstractList封装共性逻辑,子类只需实现差异化的get()、add());

若需要同时满足“多行为契约”和“共性实现”,可以让抽象类实现接口(比如AbstractMap实现Map接口,既遵守Map契约,又封装共性逻辑)。

5.Java是值传递还是引用传递?举个例子说明

答案:Java只有“值传递”,没有引用传递。区别在于:

传递基本类型时,传的是“值的副本”(修改副本不影响原变量);

传递引用类型时,传的是“引用地址的副本”(副本和原引用指向同一个对象,修改对象内容会影响原对象,但修改副本的指向不会影响原引用

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档