Java 面向对象编程:继承与静态变量
选择题 并解释答案
- 已知 class A{ public static int v = 1; public void fn() }, class B extends A{ public static int v = 2; public void fn() public void fn1() } 下列说法正确的是() A. 类B中的fn与类A中的fn冲突了,会报错 B. 类B中的v和类A中的v冲突了,会报错 C. A a = new B(); a.fn1()调用会报错 D. A a = new B(); a.v的值是2;
答案:D A a = new B(); a.v的值是2;因为v是静态变量,属于类而非对象,所以在子类中定义同名静态变量并不会覆盖父类的静态变量,而是形成了两个独立的静态变量。同时,A a = new B()虽然是通过父类引用指向子类对象,但是静态变量是不受对象影响的,所以a.v的值是2。 选项A和B是错误的,因为子类中的方法和变量可以与父类同名而不会报错,只有在访问时会根据具体的引用类型来确定使用哪个方法或变量。选项C错误是因为fn1方法只在B类中定义,A类型的引用不能直接调用B类中新增的方法,需要进行强制类型转换。
原文地址: https://www.cveoy.top/t/topic/n6KA 著作权归作者所有。请勿转载和采集!