Java常见面试题---面向对象篇

什么是构造方法?构造方法有那些特点?

构造方法,是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载

特点:

  1. 构造方法的方法名与类名一致
  2. 构造方法没有返回值
  3. 创建对象时,通过new关键字来调用构造方法

重载和重写的区别?

名称 重载(overload) 重写(override)
范围 同一类中 父类和子类
方法名 必须相同 必须相同
参数列表 类型、个数、顺序至少有一个不同 必须与父类相同
返回类型 可以不同 子类重写的方法,返回类型和父类一样或者是父类的子类
修饰符 可以不同 子类方法不能缩小父类方法的访问范围


抽象类和接口的区别?

接口抽象类不同点

接口的特点:

  1. 接口中只包括虚方法的定义,只有声明定义,没有函数实现  (抽象类可以有实现
  2. 接口类中可以包括属性、事件、索引器等,但不能包括字段  (抽象类可以有字段
  3. 接口类属于多继承       (抽象类单继承,符合类的特点)
  4. 接口可以支持回调  (抽象类不支持回调)
  5. 继承了接口的类必须全部实现接口的方法

抽象类的特点:

  1. 抽象类不能被实例化,也不能被密封
  2. 抽象类中的方法,在派生类中要有实现,没有实现的话,这个类就得是抽象类,在由这个类的派生类实现,方法得标记为抽象方法
  3. 派生类中实现 基类的抽象方法,必须使用override 修饰符
接口抽象类相同点
  • 不能实例化,由派生类来实现
  • 都需要子类实现父类的方法

 static关键字用法

static关键字修饰类

在Java中,static一般用来修饰成员变量或者函数。但有一种特殊用法是用static修饰内部类(普通类是不允许声明为静态的,只有内部类才可以),被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。

static关键字修饰方法

static修饰的方法被称之为静态方法,也叫类方法

加Static修饰的方法与不加Static修饰的方法的区别

  • 加static的方法,可以通过类名直接访问,也可以通过对象名访问;加了static的方法,不能再内部写this,因为直接用类名.方法的时候,没有当前对象
  • 而不加static只能通过对象名访问加了static的方法,不能在内部访问非static的属性和行为,因为在静态方法的内部无法确定非static的内容属于那个对象,它是通过类名调用
static关键字修饰变量

被static修饰的成员变量属于类,不属于某个对象(也就是说:多个对象访问或修改static修饰的成员变量时,其中一个对象将static成员变量进行了修改,其他的对象的static成员变量值跟着改变,即多个对象共享同一个static成员变量 )

被static修饰的成员,可以通过类名直接访问

在静态方法中,不能访问非静态的内容(变量),不能使用this/super;非静态中,可以访问静态中的变量

static修饰代码块

静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。

静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。

final关键字用法

用来修饰一个类;

当 final 关键字用来修饰一个类的时候,表明这个类不能有任何的子类,也就是说这个类不能被继承。

final类中的所有成员方法都会被隐式地指定为final方法,也就是说一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写

用来修饰一个方法;

当 final 关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。

用来修饰一个局部变量;

一旦使用 final 用来修饰局部变量,那么这个变量就不能进行更改「一次赋值,终生不变」。

  1. 对于基本类型来说,不可变说的是变量当中的数据不可改变;
  2. 对于引用类型来说,不可变说的是变量当中的地址值不可改变。
用来修饰一个成员变量

    对于成员变量来说,如果使用 final 关键字修饰,那么这个变量也照样是不可变。

  1. 由于成员变量具有默认值,所以用了 final 之后必须手动赋值,不会再给默认值了;
  2. 对于 final 的成员变量,要么使用直接赋值,要么通过构造方法赋值,二者选其一;
  3. 必须保证类当中所有重载的构造方法都最终会对 final 的成员变量进行赋值。

什么是面型对象 ?

是一种编程思想,它的核心概念是“对象”。“对象”是指具有特定属性和行为的实体,能够接收消息、处理消息并返回结果。在面向对象的编程语言中,所有的程序都是由多个对象组成的。

面向对象的编程语言具有三个基本概念:封装、继承和多态。

  • 封装:即隐藏对象的属性和实现细节
  • 继承:通过子类继承父类,提高代码的扩展性
  • 多态:提高代码的灵活性,降低耦合性

你可能感兴趣的:(java,面试,开发语言)