JAVA基础篇---语法相关(面试)

文章目录

  • Java语法面试相关
    • 访问控制符权限
    • final,finally和finalize的区别
    • Super
    • 接口
    • 抽象类
      • 接口与抽象类区别
    • 重载与重写的区别
      • 方法重写
      • 方法重载

Java语法面试相关

访问控制符权限

修饰符 本类 同包 子类 其他
private × × ×
default × ×
protected ×
public

final,finally和finalize的区别

  • final修饰类,该类不能被继承。
  • final修饰方法,该方法不能被重写。
  • final修饰变量,只能赋值一次。
  • finally是try语句中的一个语句体,不能单独使用,用来释放资源。必须在try/catch语句中,当进入try/catch语句且没被打断的时候最终肯定被执行finally,如果未在try/catch或被打断不会执行。
  • finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。 特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。

Super

在 JAVA类中使用 super来引用父类的成分,用 this来引用当前对象,如果一个类从另外一个类继承,我们 new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用 super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。

接口

接口的意义用三个词就可以概括 : 规范,扩展,回调。

抽象类

1、普通的JAVA类也可以在CLASS前加ABSTRACT声明为抽象,只不过此时的该类不再可以实例化。
2、如果一个类里有一个以上的抽象方法,则该类必须声明为抽象类,该方法也必须声明为抽象。
3、抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充
用 abstract 修饰的类是抽象类。
抽象类是不完整的,并且它只能用作基类。

(注)JAVA支持单继承,多实现。

多继承缺点:
1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。
2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。

即便两个接口中存在相同的抽象函数。但在实现时,我们只能在当前类中实现一个这样的函数,所以不论是实现的哪个,另外一个同名的也就无所谓了

接口与抽象类区别

  • 接口只包含抽象方法,抽象类可以包含普通方法。
  • 接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。
  • 接口不包含构造方法,抽象类里可以包含构造方法。

重载与重写的区别

方法重写

在Java中,子类继承父类的方法,而不需要重新编写相同的方法。但有时候子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写。方法重写又称覆盖。

规则:“两同两小一大”:

1.“两同”:即方法名相同形参列表相同
2.“两小”:指的是子类方法返回值类型方法声明抛出的异常类要比父类方法更小或相等,因为子类可以解决父类的一些问题,不能比父类有更多的问题;
列如,父类的一个方法申明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException的子类异常。
3.“一大”:指的子类方法的访问权限应该比父类的更大或相等;

(注意)
1.方法的重写,在一般情况下,返回自类型、方法,名,形参列表,访问权限,抛出的异常,都应该保持一致;
2.被覆盖的方法不能为 private,否则在其子类中只是定义了一个方法,并没有对其进行覆盖。

方法重载

java允许同一个类里定义多个同名的方法,只要形参列表不同即可。

规则:“两同,一个不同”:

1.”两同“:即同一个类中、方法名相同;
2.“一个不同”:即形参列表不同;

注意:方法的重载只跟方法名、参数列表有关,与方法其他部分,如返回值类型、修饰符等无关。

你可能感兴趣的:(JAVA基础篇---语法相关(面试))