关于《Java读书笔记》第六章课后习题选择题总结与疑问

课后习题

选择题 3 题

代码:

class Some{
    String ToString(){
        return "Some instance";
    }
}
public class Main {
    public static void main(String[] args) {
        Some some=new Some();
        System.out.println(some);
    }
}

截屏结果为:

class Some里并没有构造函数,所以系统自动为其加了个无参数无内容的构造函数,对于 some 来说,some=new Some(),即 some 此时指向的对象并没有初始内容,那么这时结果输出的 Some@XXXX,XXXX为十六进制数字 代表什么呢?

选择题 4 题

代码:

class Some1{
    int hashCode(){
        return 99;
    }
}

class Main1{
    public static void main(String[] args) {
        Some1 some=new Some1();
        System.out.println(some.hashCode());
    }
}

代码编译失败

修改代码:

class Some1{
    public int hashCode(){
        return 99;
    }
}

class Main1{
    public static void main(String[] args) {
        Some1 some=new Some1();
        System.out.println(some.hashCode());
    }
}

(在 int hashCode()前加了 public )
截屏结果为:

这就是所说的,重新定义方法要注意,对于父类中的方法权限,只能扩大但不能缩小;是不是也意味着,自己得多熟悉 object 里面的方法名称。

选择题 9 题

代码:

class Soo{
    Soo(){
       this(10);
        System.out.println("Soo()");
    }
    Soo(int x){
        System.out.println("Soo(int x)");
    }
}

class Other extends Soo{
    Other(){
        super(10);
        System.out.println("Other()");

    }
    Other(int y){
        System.out.println("Other(int y)");
    }
}

class Useos{
    public static void main(String[] args) {
        System.out.println(new Other());
        System.out.println();
        System.out.println(new Other(10));
        System.out.println();
        System.out.println(new Soo());
    }
}

结果截屏为:

可以看到,除了由调用构造函数引起的输出,还有一个,类似 选择题 3 题 的结果。

改成先定义再输出

代码:

class Useos1{
    public static void main(String[] args) {
        Other other=new Other();
        System.out.println();
        Other other2=new Other(10);
        System.out.println();
        Soo soo=new Soo();
        System.out.println();
        System.out.println(other);
        System.out.println();
        System.out.println(other2);
        System.out.println();
        System.out.println(soo);
    }
}

结果截屏为:

说明,在创建对象的时候,构造函数已经开始调用。

也就是说,在直接输出中,如System.out.println(new Other());,相当于,它会先调用构造函数,函数执行完后,再执行System.out.println(other);

posted @ 2016-03-20 22:31  20145325张梓靖  阅读(185)  评论(2编辑  收藏  举报