- 加油~之后,天天要作的事情,只在该作的时间段作
如下代码执行的结果显示是多少( )?java
public class Demo { class Super { int flag = 1; Super() { test(); } void test() { System.out.println("Super.test() flag=" + flag); } } class Sub extends Super { Sub(int i) { flag = i; System.out.println("Sub.Sub()flag=" + flag); } void test() { System.out.println("Sub.test()flag=" + flag); } } public static void main(String[] args) { new Demo().new Sub(5); } }
正确答案: A 你的答案: D (错误)
A: Sub.test() flag=1
Sub.Sub() flag=5
B: Sub.Sub() flag=5
Sub.test() flag=5
C: Sub.test() flag=0
Sub.Sub() flag=5
D: Super.test() flag=1
Sub.Sub() flag=5函数
在继承中代码的执行顺序为: 1.父类静态对象,父类静态代码块 2.子类静态对象,子类静态代码块 3.父类非静态对象,父类非静态代码块 4.父类构造函数 5.子类非静态对象,子类非静态代码块 6.子类构造函数 对于本题来讲:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,而后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,所以父类构造函数中的test()方法实际执行的是子类的test()方法,因此输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,所以输出结果Sub.Sub() flag=5。最终选择了A。
下列Java代码中的变量a、b、c分别在内存的____存储区存放。线程
class A { private String a = “aa”; public boolean methodB() { String b = “bb”; final String c = “cc”; } }
正确答案: C
A 堆区、堆区、堆区
B 堆区、栈区、堆区
C 堆区、栈区、栈区
D 堆区、堆区、栈区
E 静态区、栈区、堆区
F 静态区、栈区、栈区code
堆区:只存放类对象,线程共享; 方法区:又叫静态存储区,存放class文件和静态数据,线程共享; 栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操做指令区,线程不共享;
Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不一样表现。下边哪些说法是对的?
正确答案: A C
A 重写是父类与子类之间多态性的一种表现
B 重写是一个类中多态性的一种表现
C 重载是一个类中多态性的一种表现
D 重载是父类与子类之间多态性的一种表现对象
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。若是在一个类中定义了多个同名的方法,它们或有不一样的参数个数或有不一样的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是能够改变返回值的类型。