JAVA笔试题(与构造函数、静态变量有关)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA笔试题(与构造函数、静态变量有关)相关的知识,希望对你有一定的参考价值。

1.
class Base
int i=99;
public void amethod()

System.out.println("Base.amethod()");

Base()

amethod();


public class Derived extends Base
int i=-1;
public static void main(String[] args)
Base b=new Derived();
System.out.println(b.i);
b.amethod();

public void amethod()

System.out.println("Derived.amethod()");


这段代码运行结果如下。
Derived.amethod()
99
Derived.amethod()
请问一下,为什么不是Base.amethod()呢?
2.
class MyClass
03. static String myName="Webs-TV";
04.
05. MyClass getMyClass()
06. System.out.println(myName);
07. return null;
08.
09. public static void main(String[] args)
10. System.out.println(new MyClass().getMyClass().myName);
11.
12.
A.Compiler time error
B.runtime error
C.Print "Webs-TV" twice
D.Print "Webs-TV" once
运行结果是C,请问一下这是为什么,帮忙解释一下。谢谢啦:)

关于多态网上归纳是这样的
一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),”重写“的概念只针对方法。

因为父类的方法已经被子类重写了 所以调用的将是子类的方法啦。

2. 因为myName 是个静态变量 static在不用实例化对象的情况下也能调用 jre会无视你函数返回值等 就看你那个静态变量的值 所以打印两次~
参考技术A 第一题是因为Derived继承Base,子类方法名与父类方法名相同,构成重写,子类就会覆盖父类。
第二题第一遍输出是因为getmyclass.第二遍是因为myname输出。
参考技术B 1.amethod()方法被重写
2.getMyClass()中输出一次,main()中再输出一次追问

嗯,重写我知道。就是说,因为new的是子类,所以就调用子类的方法,对吧?
我没有明白的是return null后,为什么null.myName也能输出"Webs-TV"。
这些笔试题,做得蛮晕的,呵呵。

追答

String myName是被static修饰的,表示这是一个静态变量,即使对象为null,它的值依然不会改变,所以能够输出

参考技术C 这是多态,因为new的是子类,所以调用就是子类 参考技术D 为什么是99不是-1啊?

以上是关于JAVA笔试题(与构造函数、静态变量有关)的主要内容,如果未能解决你的问题,请参考以下文章

腾讯笔试题——java题总结无答案

java笔试题整理

求java考题,笔试题

笔试题

java从小白开始的练习(String构造器,内存分析与笔试题)

java从小白开始的练习(String构造器,内存分析与笔试题)