84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
执行顺序是这样的:
1. super(); 1.1. super.i = 7; 1.2. this.setI(20) => this.i = 60; 1.3. System.out.println("i from a is " + super.i) => 7; 2. this(); 2.1. this.i = 10; 2.2. System.out.println("i from b is " + this.i) => 10;
A.i 和 B.i 都是package-private的, B.i 没有Override A.i, 这两者是独立的;
A.i
B.i
A.setI 和 B.setI 都是public, B.setI Override A.setI, A在构造时调用的是B.setI;
A.setI
B.setI
B在构造函数之外的成员初始化是在super()之后执行的, B.i先是在super里被B.setI设为60, 再被B的成员初始化设为10;
super()
删除B中的int i = 10;之后, 如果A和B处于同一个package, B.setI访问的就是A.i, super()时A.i被设为60之后就不会有变更, 两次打印都是60
int i = 10;
在子类中再声明一个父类中已有的成员,不会报错吗?至少也应该是警告吧。
我只能说,题目出得太缺德了。实际开发中不可能这么写,自己给自己挖坑啊。
7.101.到A的构造方法,执行完Object的空参构造。2.int I=73.setI(20)调用的是子类的setI() 此时子类的I为60,父类的仍为7.4.打印this.i 此时在父类中.是 7;(注意点:变量看实际调用者, this是当前父类;方法因为被重写,调用子类)5.int I=10 覆盖了原先的60.6,打印this.i 此时为10.
60.60注意:你删除了子类的I,默认调用的就是父类的I3.调用子类setI,赋值给了父类,此时父类改变为60.5.此时没有覆盖,this.i 默认调用父类继承下来的I. 为60.
论Degbug的重要性...
执行顺序是这样的:
A.i
和B.i
都是package-private的,B.i
没有OverrideA.i
, 这两者是独立的;A.setI
和B.setI
都是public,B.setI
OverrideA.setI
, A在构造时调用的是B.setI
;B在构造函数之外的成员初始化是在
super()
之后执行的,B.i
先是在super里被B.setI
设为60, 再被B的成员初始化设为10;删除B中的
int i = 10;
之后, 如果A和B处于同一个package,B.setI
访问的就是A.i
, super()时A.i被设为60之后就不会有变更, 两次打印都是60在子类中再声明一个父类中已有的成员,不会报错吗?至少也应该是警告吧。
我只能说,题目出得太缺德了。实际开发中不可能这么写,自己给自己挖坑啊。
7.10
1.到A的构造方法,执行完Object的空参构造。
2.int I=7
3.setI(20)调用的是子类的setI() 此时子类的I为60,父类的仍为7.
4.打印this.i 此时在父类中.是 7;(注意点:变量看实际调用者, this是当前父类;方法因为被重写,调用子类)
5.int I=10 覆盖了原先的60.
6,打印this.i 此时为10.
60.60
注意:你删除了子类的I,默认调用的就是父类的I
3.调用子类setI,赋值给了父类,此时父类改变为60.
5.此时没有覆盖,this.i 默认调用父类继承下来的I. 为60.
论Degbug的重要性...