一个继承的小问题

今天看到了一道关于Java继承的题目:

  问如下代码,输出的结果是Father还是test。

class Father {
    private String name = "Father";
    
    public void getName(){
        System.out.println(name);
    }
}

class Test extends Father{
    private String name = "test";

    public static void main(String[] args){
        Test t = new Test();
        t.getName();
    }
}

  这题的答案是Father,因为test类没有重写getName方法的话,使用的是父类的方法,打印的是父类的name。

  PS:如果getName方法的内容是 System.out.println(this.getClass()); 的话,t.getName得到的是test的class。

 

  因为验证这题的时候最开始使用的kotlin

open class Father{
    private val name = "father"

//    public fun getName():String{
//        return name
//    }
}

class test:Father(){
    private val name = "test"
}

  上面的代码把注释去掉的话,test中name会报错,因为父类的方法已经使用了父类的name,子类声明重名的变量为了不产生歧义会编译时报错。所以只要改名。

  所以这个题目在kotlin中是不成立的,因为编译压根不通过。也防止在写代码的时候产生这个错误。

posted @ 2018-08-14 18:38  陆卯伍  阅读(160)  评论(0编辑  收藏  举报