zoukankan      html  css  js  c++  java
  • 一个继承的小问题

    今天看到了一道关于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中是不成立的,因为编译压根不通过。也防止在写代码的时候产生这个错误。

  • 相关阅读:
    面向对象的设计模式2
    数据结构
    算法题目1
    5.7(1) 反射
    hashMap原理(java8)
    6.1 接口
    18.1 线程
    13.2 具体的集合
    scrapy(2)——scrapy爬取新浪微博(单机版)
    5.1 类、超类和子类
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9476563.html
Copyright © 2011-2022 走看看