31 道 Java 核心面试题,统统打包给你( 五 )


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

31 道 Java 核心面试题,统统打包给你

文章插图
  • 如果在一个类中有多个相同名字的方法 , 但参数不同 , 则称为方法重载 。
  • 父类中有一个方法 , 子类中有另外一个和它有相同签名(方法名相同 , 参数相同、修饰符相同)的方法时 , 则称为方法重写 。子类在重写父类方法的时候可以加一个@Override 注解 。
19、`main` 方法可以重载吗?
可以 , 一个类中可以有多个名称为“main”的方法:
 public class MainTest {
public static void main(String[] args) {
System.out.println("main(String[] args)");
}
public static void main(String[] args,String arg) {
System.out.println("(String[] args,String arg");
}
}
但该类在运行的时候 , 只会找到一个入口 , 即 public static void main(String[] args) 。
20、一个 Java 源文件中有多个 public 类吗?
一个 Java 源文件中不能有多个 public 类 。
31 道 Java 核心面试题,统统打包给你

文章插图
21、什么是 Java 的 package(包)?
在 Java 中 , 我们使用 package(包)对相关的类、接口和子包进行分组 。这样做的好处有:
  • 使相关类型更容易查找;
  • 避免命名冲突 , 比如说 com.itwanger.Hello 和 com.itwangsan.Hello 不同;
  • 通过包和访问权限控制符来限定类的可见性 。
可以使用 package 关键字来定义一个包名 , 需要注意的是 , 这行代码必须处于一个类中的第一行 。强烈建议在包中声明类 , 不要缺省 , 否则就失去了包结构的带来的好处 。
包的命名应该遵守以下规则:
  • 应该全部是小写字母;
  • 可以包含多个单词 , 单词之间使用“.”连接 , 比如说 java.lang;
  • 名称由公司名或者组织名确定 , 采用倒序的方式 , 比如说 , 我个人博客的域名是 www.itwanger.com , 所以我创建的包名是就是 com.itwanger.xxxx 。
每个包或者子包都在磁盘上有自己的目录结构 , 如果 Java 文件时在 com.itwanger.xxxx 包下 , 那么该文件所在的目录结构就应该是 com->itwanger->xxxx 。
默认情况下 , java.lang 包是默认导入的 , 我们不需要显式地导入该包下的任何类 。
 package com.cmower.bb;
public class PackageTest {
public static void main(String[] args) {
Boolean.toString(true);
}
}
Boolean类属于 java.lang 包 , 当使用它的时候并不需要显式导入 。
22、什么是访问权限修饰符?
访问权限修饰符对于 Java 来说 , 非常重要 , 目前共有四种:public、private、protected和 default(缺省) 。
一个类只能使用 public 或者 default 修饰 , public 修饰的类你之前已经见到过了 , 现在我来定义一个缺省权限修饰符的类给你欣赏一下 。
 class Dog {
}
哈哈 , 其实也没啥可以欣赏的 。缺省意味着这个类可以被同一个包下的其他类进行访问;而 public 意味着这个类可以被所有包下的类进行访问 。
假如硬要通过 private 和 protected 来修饰类的话 , 编译器会生气的 , 它不同意 。


推荐阅读