Java面试基础 面向对象 面试宝典

2. 面向对象


2.1. 类是什么? 对象是什么?举例说明

答案:类是一组相关属性和行为的集合是一个抽象的东西,对象则是该类的一个具体的体现。
举例: 学生就是一个类,然后每一个学生都是学生的一个个具体的体现,所以每一个学生就是一个学生。

2.2. 类由哪些内容组成?

答案:类由成员变量和成员方法组成
成员变量对应的就是事物的属性(就是事物固有的信息,比如: 人的属性有身高 , 姓名 , 年龄 , 学历…) , 成员方法对应的是行为(行为: 就是该事物可以做的事情,比如:人的行为有: 吃饭,睡觉…)

2.3. 成员变量与局部变量的区别?

答案:
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

2.4. 什么是匿名对象?什么时候使用匿名对象?

答案:匿名对象指:没有起名字的对象
使用匿名对象:
a:调用方法,仅仅只调用一次的时候
b:匿名对象可以作为实际参数传递

2.5. 使用面向对象【封装】的好处有哪些?

答案:隐藏实现细节,提供公共的访问方式;
提高了代码的复用性;
提高安全性。

2.6. private 关键字在哪里使用? 被 private 修饰的成员有什么特点?

答案:类中的成员需要私有的时候使用private关键字
特点:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问

2.7. 为什么要有 this 关键字?this 关键字的含义?

答案:this用来解决成员变量与局部变量重名问题
this关键字代表的是本类对象引用;谁调用我,this就代表谁.

2.8. 构造方法的作用是什么?构造方法的特点是什么?构造方法的注意事项? 构造方法中可不可以写return 语句呢?

答案:构造方法的作用是用于给类的成员变量赋值,完成类的初始化工作
构造方法的特点:
构造方法的名称和类名相同
构造方法没有返回值类型,连void也没有
构造方法没有具体的返回值
构造方法的注意事项:
a: 如果一个类没有给出构造方法,系统将会提供一个默认无参的构造方法
b: 如果我们给出类构造方法,系统将不会提供默认无参的构造方法,这个时候如果我们还想使用无参的构造方法来创建对象,那么就需要我们给出无参的构造方法
可以写空的return语句.

2.9. 一个类的缺省构造方法可以有参数吗?

答案: 一个类的缺省构造方法没有参数

2.10. 静态变量与成员变量的区别?

答案:1:所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
2:内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
3:内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
4:调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用

2.11. 请说明一个对象的创建过程做了哪些事情?

答案:Student s = new Student();
1:将Student.class 字节码文件加载到内存
2: 在栈内存中,开辟一个空间存储 s变量,用来记录Student对象的引用
3: 在堆内存中,开辟一个空间存储 new Student()对象的成员信息
2:加载类中静态成员
3:执行类中静态代码块
4:加载对象中普通成员
5:执行构造代码块
6:执行构造方法
7:将new Student()的地址赋值给 s 变量

2.12. 继承的好处是什么?

答案: A: 提高了代码的维护型
B: 提供了代码的复用性
C: 让类与类之间产生了关系, 是多态的前提

2.13. Java 中的类的继承特点是什么以及继承的注意事项?

答案:继承的特点: 在java语言中类的继承只支持单继承,不支持多继承.但是可以多层继承。
继承的注意事项:
A: 子类只能继承父类非私有的成员
B: 子类不能继承父类的构造方法,但是可以通过super去访问父类的构造方法
C: 不要为了某个功能去使用继承

2.14. this 和 super 分别是什么,他们各自的应用场景是什么?

答案:this代表的是本类对象的引用 , 谁调用我这个方法,这个方法里边的this就代表谁。一般的使用场景是,当局部变量隐藏了成员变量的时候,我们可以使用this去明确指定要访问的是成员变量
super代表的是父类存储空间的一个标志(可以理解为父类对象的引用),我们可以使用super来访问父类的成员

2.15. 什么是方法重写?需要注意哪些问题?

答案:方法重写:指子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写
需要注意的问题:
父类中私有方法不能被重写
子类重写父类方法时,访问权限不能更低
父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此)

2.16. 方法重写和重载有什么区别?

答案:重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同),与返回值类型无关。
重写Override是发生在子父类中的一个现象, 子类中出现了和父类中一模一样的方法,与返回值有关.

2.17. 子父类中构造方法的执行有什么特点?为什么要这样?

答案:1、子类有所有的构造方法默认都会访问父类中空参数的构造方法。
因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。每一个构造方法的第一条语句默认都是:super()
2、如果父类中没有空参数的构造方法,通过下列方式解决
a) 子类通过super去显示调用父类其他的带参的构造方法
b) 子类通过this去调用本类的其他构造方法(本类其他构造也必须首先可以访问了父类构造)
注意:super(…)或者this(…)必须出现在第一条语句上,否则,就会有父类数据的多次初始化

2.18. 静态代码块,构造代码块,构造方法的执行顺序是什么以及执行特点?

答案:A: 先执行所有的静态代码块,再执行所有的构造代码块,最后执行构造方法
B: 静态代码块只执行一次, 构造代码块和构造方法,每创建一次对象就执行一次

2.19. final 关键字是什么意思,可以修饰那些成员?被修饰的成员有哪些特点?

答案:final最终的意思。
final可以修饰类,成员变量,成员方法
final修饰类,此类不能被继承。
final修饰变量,变量就成了常量,只能被赋值一次
final修饰方法,方法不能被重写

2.20. 什么是多态,多态的前提是什么?

答案:一种事物在不同时刻表现出来的状态就是多态
多态的前提:
a: 需要有继承
b: 需要有方法重写(其实没有也是可以的,但是没有意义),不同状态的表现就是就是靠方法重写体现的
c: 需要有父类的引用指向子类对象:Fu f = new 子类();

2.21. 多态中成员(成员变量,成员方法,静态成员方法)的访问特点是什么?

答案: 访问成员变量: 编译看左边 , 运行看左边 (因为成员变量其实就是属性,属性就是只该事物的描述信息,所以使用父类在访问的时候,访问的就是父类的成员变量)
成员方法:编译看左边,运行看右边(这个是多态的本质,存在动态绑定的机制)
静态成员方法: 编译看左边,运行看左边 (所以说静态算不上重写)

2.22. 多态的好处?

答案: A:提供了代码的维护性(通过继承保证)
B:提供了代码的扩展性(通过多态保证),这个特点也体现了多态的最常见的应用,作为参数传递.

2.23. 多态的弊端是什么,如果我们想访问子类的特有的功能我们应该怎么办?

答案: 多态的弊端,不能访问子类中特有的功能
如果我们还想使用子类中特有的功能,我们需要使用向下转型(向下转型: 就是将父类的引用强制转换成子类的引用,在向下转型的过程中需要注意一个异常: ClassCastException)

2.24. 抽象类是什么,抽象类的特点?

答案:使用了关键字abstract声明的类叫做“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
抽象类的特点:
A: 抽象类的定义格式: abstract class 类名{}
抽象方法的定义格式: public abstract 返回值类型 方法名();
B:抽象类中可以存在抽象方法,也可以存在非抽象方法
C:抽象类不能直接进行实例化,我们可以使用多态的形式进行进行间接实例化
D:抽象类的子类
可以是抽象类(没有意思,如果子类还是抽象类,那么我们还是不能进行实例化,还需要一个子类去继承),也可以是非抽象类(存在一个前提: 子类必须重写父类的抽象方法)

2.25. 抽象类中有没有构造方法,如果有它是用来做什么的?

答案: 抽象类虽然不能进行实例化,但是抽象类中是存在构造方法,该构造方法的作用是用于子类访问父类数据是的初始化.

2.26. 接口中成员变量的特点,以及成员方法的特点?

答案:接口中的成员变量都是常量,存在默认的访问修饰符:public static final
接口中的成员方法的特点: 都是抽象方法,存在默认的访问修饰符: public abstract

2.27. 请说出类与类,类与接口,以及接口与接口的关系以及特点?

答案:类与类是继承的关系,只支持单继承,可以是多层继承。
类与接口是实现的关系,可以是多实现
一个类可以继承一个类的同时,还可以实现多个接口
接口与接口是继承的关系,可以是单继承也可以是多继承

2.28. 抽象类和接口的区别?

答案:A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。

2.29. 形式参数是基本类型要的是什么?是类名要的是什么?是抽象类名要的是什么?是接口名要的是什么?

答案: 形式参数是基本类型要的是一个基本类型的变量或者具体的常量值
是类名的时候要的是一个该类的对象
是抽象类名的时候的要的是一个继承自该类的一个子类对象
是接口的时候要的是一个实现了该接口的子类对象

2.30. 返回值类型是基本类型返回的是什么?是类名返回的是什么?是抽象类名返回的是什么?是接口名返回的是什么?

答案:返回值是基本数据类型的时候返回的是一个具体的值
是类名的时候,本质上返回的是一个该类对应的子类对象
是抽象类名的时候返回的应该是一个继承自该类的子类对象
是接口名的时候返回的是一个实现了该接口的子类对象

2.31. package它有什么作用?

答案:package,包的意思,其实就是文件夹,它可以对类进行分类管理

2.32. import的作用?

答案:在不同包下的类之间相互访问的时候,发现,每次使用不同包下的类的时候,都需要加包的全路径。比较麻烦,这个时候,java就提供了( import )导包的功能。使用import可以将包中的类导入进来,以后使用类的时候,不需导包,直接使用,简化了书写。

2.33. 内部类有哪些访问特点?

答案:1. 内部类可以直接访问外部类的成员,包括私有
2. 外部类要访问内部类的成员,必须先创建内部类对象

2.34. 匿名内部类的格式是什么?其本质是什么?

答案: 匿名内部类的格式:
new 类名或者接口名() {
方法重写 ;
} ;
本质: 匿名内部类本质是一个继承了某一个类或者实现了某一个接口的子类对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值