Java学习手册:Java面向对象面试问题

1、Java学习手册:Java基础知识点
2、Java学习手册:Java面向对象面试问题
3、Java学习手册:Java集合、泛型面试问题
4、Java学习手册:Java并发与多线程面试问题
5、Java学习手册:Java虚拟机面试问题
6、Java学习手册:Java IO面试问题
7、Java学习手册:Java反射机制面试问题
8、Java学习手册:Java网络编程面试问题
9、Java学习手册:Java异常面试问题
10、Java学习手册:Java设计模式面试问题
11、Java学习手册:Java数据库面试问题


概述

面向对象三大基本特性:

  • 封装
  • 继承
  • 多态

面向对象五大基本原则:

  • 单一职责原则(SRP)
  • 开放封闭原则(OCP)
  • 里氏替换原则(LSP)
  • 依赖倒置原则(DIP)
  • 接口隔离原则(ISP)

一、组合与继承

Java学习手册:组合&继承


二、多态的实现机制(重载和覆盖)

Java学习手册:多态的实现机制(重载和覆盖)


三、抽象类&接口

Java学习手册:抽象类&接口


四、内部类

Java学习手册:内部类


五、不可变类

Java学习手册:不可变类


六、向上造型

Java学习手册:向上造型


七、clone方法(浅复制和深复制)

Java学习手册:clone方法(浅复制&深复制)


八、Java是否支持多继承?

Java学习手册:Java是否支持多继承?为什么?


九、重写和重载的区别?

重写出现在继承关系中,子类可以根据自己的需要重写父类的方法,当然父类中private修饰的和final修饰的方法不能被重写,重写后,子类对象调用该方法时就会执行子类中重写的方法,而不会再调用父类中对应的方法。
重载指的是在一个类中,方法名相同,但是方法参数列表不同的多个方法,参数列表不同指的是参数数量不同、类型不同和顺序不同。


十、抽象类是什么?

抽象类指的是使用abstract关键字修饰的类,这种类不能被实例化,并且这种类中可以有普通方法和抽象方法,抽象方法指的是没有方法体的方法,这种方法的内容在子类中得到实现。抽象类主要用于被继承,所以类不能用final来修饰,当一个类继承自一个抽象类,必须要实现抽象类中定义的所有抽象方法,除非该类也是一个抽象类。


十一、接口是什么?

接口中不能有普通方法和实例变量,接口中定义的都是抽象方法和常量,所以它比抽象类更“抽象”。接口中定义的方法,主要用于被类实现,一个类可以实现多个接口,实现接口后,必须要实现接口中定义的所有方法,除非是抽象类。接口之间可以继承,并可以多继承。(注:Java不支持多继承)


十二、什么是面向切面编程(AOP)?

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(来源于百度)


十三、什么是面向接口编程?

面向接口编程可以让类直接的耦合性降低。使用接口作为方法的参数,代表可以传入这个接口的所有实现类的对象;使用接口作为方法的返回值,代表可以返回这个接口的所有实现类的对象。


十四、面向对象有哪些特征?

面向对象开发的优点:

  • 代码开发模块化,更易维护和修改
  • 代码复⽤
  • 增强代码的可靠性和灵活性
  • 增加代码的可理解性

面向对象有三个特征,分别是继承、封装和多态。
继承的用途主要是代码的复用,当子类继承父类后,可以拥有父类中定义的属性和方法。在继承中,被继承的类称为父类,继承的类称为子类。
封装是面向对象的基础,目标就是实现高内聚低耦合。类是封装的基本形式,类中包含了属性和方法,属性描述了类的特征,方法描述类的行为。封装给对象提供了隐藏内部特性和⾏为的能⼒。对象提供⼀些能被其他对象访问的⽅法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每⼀种修饰符给其他的位于同⼀个包或者不同包下⾯对象赋予了不同的访问权限。
(1)通过隐藏对象的属性来保护对象内部的状态
(2)提⾼了代码的可⽤性和可维护性,因为对象的⾏为可以被单独的改变或者是扩展
(3)禁⽌对象之间的不良交互提⾼模块化
多态在Java中主要表现为父类可以指向子类对象,接口可以指向实现类对象。这样做的好处就是降低类之间的耦合性。例如,方法采用父类类型作为参数,那么不仅可以传入父类的对象,还可以传入所有子类的对象;采用一个接口作为方法的参数,可以传入该接口所有实现类的对象。


十五、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

可继承 不可重写 而是被隐藏

如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过 父类名.方法或变量名 完成。


十六、Java中对象的生命周期

1)创建阶段(Created):为对象分配存储空间,开始构造对象,从超类到子类对static成员初始化;超类成员变量按顺序初始化,递归调用超类的构造方法,子类成员变量按顺序初始化,子类构造方法调用。

2)应用阶段(In Use):对象至少被一个强引用持有着。

3)不可见阶段(Invisible):程序运行已超出对象作用域

4)不可达阶段(Unreachable):该对象不再被强引用所持有

5)收集阶段(Collected):假设该对象重写了finalize()方法且未执行过,会去执行该方法。

6)终结阶段(Finalized):对象运行完finalize()方法仍处于不可达状态,等待垃圾回收器对该对象空间进行回收。

7)对象空间重新分配阶段(De-allocated):垃圾回收器对该对象所占用的内存空间进行回收或再分配,该对象彻底消失。


十七、构造器Constructor是否可被Override?

父类的私有属性和构造方法并不能被继承,所以 Constructor 也就不能被 override(重写),但是可以 overload(重载),所以可以看到一个类中有多个构造函数的情况。


十八、在 Java 中定义一个不做事且没有参数的构造方法的作用

Java 程序在执行子类的构造方法之前,如果没有用 super() 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super() 来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。


十九、泛型中extends和super的区别

(1)<? extends T>限定参数类型的上界,参数类型必须是T或T的子类型,但对于List<? extends T>,不能通过add()来加入元素,因为不知道<? extends T>是T的哪一种子类。

(2)<? super T>限定参数类型的下界,参数类型必须是T或T的父类型,不能能过get()获取元素,因为不知道哪个是超类。


二十、父类的静态方法能否被子类重写?静态属性和静态方法是否可以被继承?

父类的静态方法和属性不能被子类重写,但子类可以继承父类静态方法和属性,如父类和子类都有同名同参同返回值的静态方法show(),声明的实例Father father = new Son(); (Son extends Father),会调用father对象的静态方法。静态是指在编译时就会分配内存且一直存在,跟对象实例无关。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值