看了
m_changgong上传的代码。学习了一下 记录了一下自己遗漏点;
输出结果是 woof woof dd 这样就可以理解 了!!!!
对于这个现象 刚看到 立马觉的 应该是 输出Object 可是一运行 输出String!!!! 完全不能理解。 直接猜测 这种情况 可能会转化成最详细的类。即子类 于是 自己写了个小方法测试了一下 如下:
3
输出结果是2 14.。这个是个小例子 知道结果一般就能想通。 可是不知道的情况下。 很多人会不注意这个问题。。 简单的来说 把\u0022全部换成“来看就好了。
4
看到这个 有点小傻眼。 我以前都不知道 借口可以多继承 其他接口。 跟神奇的是 你把其中一个接口的 f方法 注释掉 就会报错。 因为要捕获异常。 而 有2种不同的异常却不用捕获了。。这个不懂。。待高手指导。
下载地址 url:http://download.csdn.net/detail/m_changgong/4891374
public class Bark {
public static void main(String args[]) {
Dog1 woofer = new Dog1();
Dog1 nipper = new Basenji();
woofer.bark();
nipper.bark();
}
}
class Dog1 {
public static void bark() {
System.out.print("woof ");
}
}
class Basenji extends Dog1 {
public static void bark() {
System.out.println("dd");
}
}
实际上 Dog1 nipper = new Basenji(); 这个nipper 就是dog1类。 调用 静态方法 就是调用的 Dog1 里面的。
也许在来一个语句 会看的更清楚一点。
Dog1 woofer = new Dog1();
Dog1 nipper = new Basenji();
Basenji nipper2 = new Basenji();
woofer.bark();
nipper.bark();
nipper2.bark();
输出结果是 woof woof dd 这样就可以理解 了!!!!
2
public class Confusing {
Confusing(Object o) {
System.out.println("Object");
}
Confusing(String str) {
System.out.println("String");
}
public static void main(String[] args) {
new Confusing(null);
}
}
对于这个现象 刚看到 立马觉的 应该是 输出Object 可是一运行 输出String!!!! 完全不能理解。 直接猜测 这种情况 可能会转化成最详细的类。即子类 于是 自己写了个小方法测试了一下 如下:
public class Test {
Test(SuperClass superClass){
System.out.println("superClass");
}
Test(ChileClassLev1 ChileClassLev1){
System.out.println("ChileClassLev1");
}
Test(ChileClassLev2 ChileClassLev2){
System.out.println("ChileClassLev2");
}
public static void main(String[] args) {
new Test(null);
}
}
class SuperClass{
}
class ChileClassLev1 extends SuperClass{
}
class ChileClassLev2 extends ChileClassLev1{
}
果然 输出的是 ChileClassLev2 证实了我的想法。。可这时候 又有一个疑问出现了。。如果有最底层有2个子类 会是神马情况的呢。于是实验了一下 发现会报 构造方法不明确的错误。 这个 暂时 就可以确定 null 会尽量转化成最底层的实现类。。如果有多个子类 会报错。
3
public class EscapeRout {
public static void main(String[] args) {
// \u0022 是双引号的Unicode 转义字符
System.out.println("a\u0022.length()+\u0022b".length());
System.out.println("a\".length()+\"b".length());
}
}
输出结果是2 14.。这个是个小例子 知道结果一般就能想通。 可是不知道的情况下。 很多人会不注意这个问题。。 简单的来说 把\u0022全部换成“来看就好了。
4
public class Arcane3 implements Type3 {
public void f() {
System.out.println("Hello world");
}
public static void main(String[] args) {
Type3 t3 = new Arcane3();
t3.f();
}
}
interface Type1 {
void f() throws CloneNotSupportedException;
}
interface Type2 {
void f() throws InterruptedException;
}
interface Type3 extends Type1, Type2 {
}
看到这个 有点小傻眼。 我以前都不知道 借口可以多继承 其他接口。 跟神奇的是 你把其中一个接口的 f方法 注释掉 就会报错。 因为要捕获异常。 而 有2种不同的异常却不用捕获了。。这个不懂。。待高手指导。