小米科技|看看96后小伙是怎么拿捏腾讯面试官拿到offer的( 六 )


第六种 , 还可以为 args 参数添加 final 关键字:



第七种 , 最复杂的一种 , 所有可以添加的关键字统统添加上:



当然了 , 并不需要为了装逼特意把 main() 方法写成上面提到的这些形式 , 使用 IDE 提供的默认形式就可以了 。
18、Java 的重写(Override)和重载(Overload)有什么区别?
先来看一段重写的代码吧 。



重写的两个方法名相同 , 方法参数的个数也相同;不过一个方法在父类中 , 另外一个在子类中 。 就好像父类 LaoWang 有一个 write() 方法(无参) , 方法体是写一本《基督山伯爵》;子类 XiaoWang 重写了父类的 write() 方法(无参) , 但方法体是写一本《茶花女》 。
来写一段测试代码 。

大家猜结果是什么?



在上面的代码中 , 们声明了一个类型为 LaoWang 的变量 wang 。 在编译期间 , 编译器会检查 LaoWang 类是否包含了 write() 方法 , 发现 LaoWang 类有 , 于是编译通过 。 在运行期间 , new 了一个 XiaoWang 对象 , 并将其赋值给 wang , 此时 Java 虚拟机知道 wang 引用的是 XiaoWang 对象 , 所以调用的是子类 XiaoWang 中的 write() 方法而不是父类 LaoWang 中的 write() 方法 , 因此输出结果为“小王写了一本《茶花女》” 。
再来看一段重载的代码吧 。


重载的两个方法名相同 , 但方法参数的个数不同 , 另外也不涉及到继承 , 两个方法在同一个类中 。 就好像类 LaoWang 有两个方法 , 名字都是 read() , 但一个有参数(书名) , 另外一个没有(只能读写死的一本书) 。
来写一段测试代码 。


这结果就不用猜了 。 变量 wang 的类型为 LaoWang , wang.read() 调用的是无参的read() 方法 , 因此先输出“老王读了一本《Web全栈开发进阶之路》”;wang.read(\"金瓶\") 调用的是有参的 read(bookname) 方法 , 因此后输出“老王读了一本《金瓶》” 。 在编译期间 , 编译器就知道这两个 read() 方法时不同的 , 因为它们的方法签名(=方法名称+方法参数)不同 。
简单的来总结一下:
1)编译器无法决定调用哪个重写的方法 , 因为只从变量的类型上是无法做出判断的 , 要在运行时才能决定;但编译器可以明确地知道该调用哪个重载的方法 , 因为引用类型是确定的 , 参数个数决定了该调用哪个方法 。
2)多态针对的是重写 , 而不是重载 。

  • 如果在一个类中有多个相同名字的方法 , 但参数不同 , 则称为方法重载 。
  • 父类中有一个方法 , 子类中有另外一个和它有相同签名(方法名相同 , 参数相同、修饰符相同)的方法时 , 则称为方法重写 。 子类在重写父类方法的时候可以加一个@Override 注解 。
19、`main()` 方法可以重载吗?
可以 , 一个类中可以有多个名称为“main”的方法:


但该类在运行的时候 , 只会找到一个入口 , 即 public static void main(String[
args) 。
20、一个 Java 源文件中有多个 public 类吗?
一个 Java 源文件中不能有多个 public 类 。

21、什么是 Java 的 package(包)?
在 Java 中 , 我们使用 package(包)对相关的类、接口和子包进行分组 。 这样做的好处有:
  • 使相关类型更容易查找;
  • 避免命名冲突 , 比如说 com.itwanger.Hello 和 com.itwangsan.Hello 不同;
  • 通过包和访问权限控制符来限定类的可见性 。
可以使用 package 关键字来定义一个包名 , 需要注意的是 , 这行代码必须处于一个类中的第一行 。 强烈建议在包中声明类 , 不要缺省 , 否则就失去了包结构的带来的好处 。