我想拿到Offer(三)

类与接口:

  • 抽象类和接口的对比
    抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
    从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
  • 抽象类和接口的相同点:
    接口和抽象类都不能实例化。
    都位于继承的顶端,用于被其他实现或继承。
    都包含抽象方法,其子类都必须覆写这些抽象方法。
  • 不同点:
    备注:Java8中接口中引入默认方法和静态方法,以此来减少抽象类和接口之间 的差异

现在,我们可以为接口提供默认实现的方法了,并且不用强制子类来实现它。 接口和抽象类各有优缺
点,在接口和抽象类的选择上,必须遵守这样一个原则:

  1. 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量 少用抽象类。
  2. 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用 的功能。

普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法。
  • 抽象类不能直接实例化,普通类可以直接实例化。

抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承, 这样彼此就会产生矛
盾,所以 final 不能修饰抽象类

变量与方法:

成员变量与局部变量的区别有哪些:
变量:
在程序执行的过程中,在某个范围内其值可以发生改变的量。从本质上讲,变量其实是内存中的一小块区域 成员变量:方法外部,类内部定义的变量 局部变量:类的方法中的变量。 成员变量和局部变量的区别。

作用域:

  • 成员变量:针对整个类有效
  • 局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)

存储位置:

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
  • 局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自动释放。

生命周期:

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失。
  • 局部变量:当方法调用完,或者语句结束后,就自动释放。

初始值:

  • 成员变量:有默认初始值
  • 局部变量:没有默认初始值,使用前必须赋值
  • 使用原则:在使用变量时需要遵循的原则为:就近原则 首先在局部范围找,有就使用;接着在成员位置找。

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

在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?

帮助子类做初始化工作

一个类的构造方法的作用是什么?若一个类没有声明构造方法, 改程序能正确执行吗?为什么?

主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构 造方法也会有默认的不
带参数的构造方法。

构造方法有哪些特性?

  • 名字与类名相同。
  • 没有返回值,但不能用void声明构造函数。
  • 生成类的对象时自动执行,无需调用。

静态变量和实例变量区别:

  • 静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会 有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。
  • 实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量 是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。

静态变量与普通变量区别:

  • static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有 的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始 化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。还有一点就是static成员变量的初始化顺序按照定义的顺序进行初始化。

静态方法和实例方法有何不同?

  1. 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使 用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调 用静态方法可以无需创建对象。
  2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此 限制。

在一个静态方法内调用一个非静态成员为什么是非法的?

由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静 态变量,也不可以访问
非静态变量成员。

什么是方法的返回值?返回值的作用是什么?

  • 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提 是该方法可能产生结果)。返回值的作用:接收出结果,使得它可以用于其他的操作。