[004] - JavaSE面试题(四):JavaSE语法(2)

第一期:Java面试 - 100题,梳理各大网站优秀面试题。大家可以跟着我一起来刷刷Java理论知识

[004] - JavaSE面试题(四):JavaSE语法(2)

第1问:重载(overload)和重写(override)的区别?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。

重载对返回类型没有特殊的要求。

方法重载的规则:

  • 方法名一致,参数列表中参数的顺序,类型,个数不同。
  • 重载与方法的返回值无关,存在于父类和子类,同类中。
  • 可以抛出不同的异常,可以有不同修饰符。

方法重写的规则:

  • 参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致。
  • 构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次声明。
  • 访问权限不能比父类中被重写的方法的访问权限更低。
  • 重写的方法能够抛出任何非强制异常(UncheckedException,也叫非运行时异常),无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

第2问:构造方法能不能重写?能不能重载?构造方法能不能显式调用?

不可以重写,但可以重载

不能显式调用,不能把构造方法当成普通方法调用,只有在创建对象的时候才会被系统调用

第3问:阐述静态变量和实例变量的区别?

静态变量:
是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;

实例变量:
必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

第4问:什么是隐式转换?什么是显式转换?

显式转换就是强制类型转换,把一个大类型的数据强制赋值给小类型的数据;

隐式转换就是自动类型转换,大范围的变量能够接受小范围的数据;

第5问:什么是拆装箱?

拆箱:把包装类型转化为基本数据类型

装箱:把基本数据类型转化为包装类型

第6问:break 和 continue 的区别?

break 和 continue 都是用来控制循环的语句。

break 用于完全结束一个循环,跳出循环体执行循环后面的语句。

continue 用于跳过本次循环,执行下次循环。

第7问:内部类与静态内部类的区别?

内部类:

  • 内部类中的变量和方法不能声明为静态的。
  • 内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B()
  • 内部类可以引用外部类的静态或者非静态属性及方法。

静态内部类:

  • 静态内部类属性和方法可以声明为静态的或者非静态的。
  • 实例化静态内部类:B是A的静态内部类,A.B b = new A.B()。
  • 静态内部类只能引用外部类的静态的属性及方法。

二者比较:

  • 静态内部类相对于外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量、方法。如果要访问,必须new一个外部类的对象,使用new出来的对象访问。但是可以直接访问静态的变量,调用静态的方法。
  • 普通内部类作为外部类的一个成员存在,在普通内部类中可以直接访问外部类的属性,调用外部类的方法。
  • 外部类要访问内部类的属性或者方法,需要创建一个内部类的对象,使用该对象去访问属性或者调用方法。
  • 其他类要访问普通内部类的属性或者方法,必须在外部类中创建一个普通内部类的对象作为属性,外部类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性。
  • 其他类要访问静态内部类的属性或者方法,直接创建一个静态内部类对象即可。

 

posted @ 2020-09-16 14:39  子墨老师  阅读(162)  评论(0编辑  收藏  举报