Java oop面试概念集

基本概念:

类、对象、抽象类、接口

解释一下OOP的概念?

OOP,面向对象编程,照我的理解就是把现实社会中的各类事物
通过抽取它们的共同特性映射到计算机模型当中的类,这些类有
它们各有的数据结构,也就是属性,以及它们各有的功能,也就是
方法,再通过创建对象,完成各类对象之间的数据交互。它的最终
目的是实现代码复用,它的三大特性是封装,继承,和多态。

什么是类?

类就是拥有相同功能和相同的属性的对象的集合
1.类中有哪些东西组成?
属性、静态属性、方法、构造方法、静态代码块、代码块
2.什么是内部类?
内部类可以理解为类中的类,关于它,主要是为了更严密的封装
3.内部类的运行机制是什么?
内部类和普通的类一样,都会生成字节码文件,但是它的字节码文件比较特殊:外部类$内部类.class
4.能不能举出个常用API中内部类的例子?
例如包装类型中保存常量池的内部类

访问修饰符

public—protect—default—private 访问权限从大到小的排序

什么是构造方法?

构造方法是类在进行创建对象的时候隐式调用的一个方法,是一个特殊的方法,这个方法没有返回值,方法名和类名一致
1.子类创建对象的时候,构造方法是怎么调用的?
子类创建对象的时候首先会创建父类的无参对象,也就是执行了父类的空参构造方法,不管子类有没有参数列表,都必须经过父类的无参构造,所以父类的无参列表是必须存在的

什么是对象?

由类创建出来的实例,它具有该类的属性,方法
1.你怎么理解Java中的对象
我的理解是:既然类是一个个实例具有共同属性、行为的抽象,那么不同的对象可以通过调用类中的属性和方法,来实现了数据的交互
2.有几种创建对象的方式?
使用new关键词创建–使用反射–使用clone创建–反序列化创建

什么是抽象类?

抽象类是指使用abstract关键词且在实际开发中有些类的行为我们无法具体的描述清楚,那么我们就将这种方法设计成抽象方法,留给继承这个类的子类去实现
java规定一个类中如果有抽象方法,那么该类必须是抽象类
1.抽象类中必须要有抽象方法吗?
可以不需要,但是没有抽象方法的抽象类没什么用
2.抽象类中可以new对象吗?如果没有,那为什么还有构造方法存在?
抽象类中是不可以new对象的,他其中的构造方法是留给子类继承用的
3.抽象类中的抽象必须要实现吗?
如果是普通的类继承的,就必须要重写,如果是抽象类继承了抽象类就不需要强制重写

什么是接口?

接口就是抽象方法和全局常量的集合,使用Interface关键字。
1.使用接口有什么好处?
面向接口编程,它从一开始约定好了需要实现的方法,这是强制的,其次它规避了Java中的单继承,接口可以多实现
2.你怎么理解Java中的接口?
首先,接口它是约定,如果某一类实现了它,该类就必须强制的实现该接口中的方法,使得实现接口的类更加的“标准”,实现了规范和具体的分离
3.接口中有构造方法吗?
没有,因为接口只是一套规范,实例化对他来说就没有意义

接口中的变量会被隐式的指定为  public static final   变量(并且只能是 public,用 private 修饰会报编译错误。)
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
接口中的默认方法:可以直接实现,实现类可以对其进行重写
接口中的静态方法:可以通过接口.方法进行调用

什么是重载?

方法的重载是指在同一类中两个方法名字相同,形参列表不同(参数类型不同、参数个数不同、参数顺序不一样)
方法的重载与修饰符和返回值类型无关

什么是重写?

方法的重写是发生在继承关系中,子类继承了父类,对父类的方法进行重写,
方法重写必须和父类方法名一致、参数列表一致、返回值类型一致、访问修饰符必须要大于或者等于父类的方法

final用在 类、方法、 属性上分别有什么效果?

final使用在类上代表这个类不可被继承
final使用在方法上代表这个方法不可被重写
final使用在属性上代表这个属性不能在更改属性值

static?

凡是被static修饰的,是从属于类的,在类加载的时候就会加载到内存中,对整个类中的对象而言,它是公共的
Java修饰属性指的是静态属性、 修饰方法指的是静态方法
不管是静态变量还是静态方法,他们的生命周期都是随着类的
在设计工具类的时候使用static修饰方法,更加方便进行频繁的调用操作
例如在集合的操作类Collections中和数组的操作类Arrays中都有大量的使用static修饰的方法

类中关于构造方法、成员变量、初始化代码块、静态初始化代码块等的执行顺序?

父类静态变量—>父类static代码块—>子类静态变量—>成员变量赋值—>父类代码块—>父类无参构造—>成员变量赋值—>子类代码块—>子类无参构造

this?

this是指当前对象的引用,可以在构造方法中调用其他的构造方法,但是必须要在第一行使用

super?

super和this差不多,不过它是父类对象的引用,在构造方法中也可以使用

面向对象的三大特性:

什么是封装

封装是oop的重要特性,其主要的目的是为了保护隔离、降低耦合

例如类中的属性在没有封装的时候,外部能够对其进行随意的改变,封装属性的时候,应该向外提供两个对外的公共接口,在这两个接口中进行属性的赋值和判断
类是对对象的封装
包是对类的封装
将公共的部分抽取出来,实现代码的复用
将应用中常常需要变化的部分独立出来,不要和不变化的混合在一起
什么是继承

继承是指两个类具有父子关系,Java中称其为父类和子类,使用的是extends关键词
当一个子类继承了一个父类时,子类会自动的继承父类的属性和方法
子类在一般情况下应该是比父类更加的强大的存在,因为它即可以重写父类中的方法,也可以拥有自己独有的方法

什么是多态

可以理解为一个类有多种表现形式,每种形式对应的实现不一样
实现多态的条件有:
1.子类继承父类
2.子类重写父类中的方法
3.父类引用指向子类对象

自动向下转型

子类对象可以转成父类对象,也就是父类引用指向子类对象
向上转型可以调用父类的所有方法,也可以调用子类的重写方法,但是不可以调用子类的独有的方法
向上转型的对象既属于父类也属于子类,使用instanceof验证后得两个都是true
优点:方便更换实现类,程序的扩展性和灵活性好
缺点:向上转型之后不能调用子类独有的方法,调用的范围缩小了

强制向上转型

父类引用指向子类对象之后,如果要是用子类独有的方法,这时可以将对象进行强制向下转型
使用和类型强转一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值