大神帮忙看看输出结果是什么?为什么?

qq_36030355 2016-09-27 09:41:24
public class Test {
public static void main(String[] args) {
new Sub();
}
}
class Base{
private int i=2;
public Base(){
System.out.println(this.i);
this.display();
}
public void display(){
System.out.println(i);
}
}
class Sub extends Base{
private int i=222;
public Sub(){
i=222;
}
public void display(){
System.out.println(this.i);
}
}
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2016-09-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_36030355 的回复:
[quote=引用 4 楼 yuxiangaaaaa 的回复:]
public class Test {
	public static void main(String[] args) {
		new Sub();
	}
}

class Base {
	private int i = 2;

	public Base() {
		System.out.println("执行了Base()");
		System.out.println(this.i);
		this.display();
	}

	public void display() {
		System.out.println("执行了Base.display");
		System.out.println(i);
	}
}

class Sub extends Base {
	private int i = 222;

	public Sub() {
		System.out.println("执行了Sub()");
		i = 222;
	}

	public void display() {
		System.out.println("执行了Sub.display");
		System.out.println(this.i);
	}
}
结果: 执行了Base() 2 执行了Sub.display 0 执行了Sub() 执行流程看到了吧?先执行Sub类的display方法,然后再执行private int i = 222; public Sub() { System.out.println("执行了Sub()"); i = 222; } 注入i的值,所以执行display的时候i=0,不是222
this.display() 为什么会调用Sub里面的方法?[/quote] 因为new Sub(); 创建的是子类的对象,display()方法在Sub里面已经被重写了,所以会执行子类的display(),在Sub实例中优先执行Sub的方法
qq_36030355 2016-09-27
  • 打赏
  • 举报
回复
引用 2 楼 wlwlwlwl015 的回复:
2和0~~~~~~
为什么this.display()会调用子类的display()方法?
qq_36030355 2016-09-27
  • 打赏
  • 举报
回复
引用 4 楼 yuxiangaaaaa 的回复:
public class Test {
	public static void main(String[] args) {
		new Sub();
	}
}

class Base {
	private int i = 2;

	public Base() {
		System.out.println("执行了Base()");
		System.out.println(this.i);
		this.display();
	}

	public void display() {
		System.out.println("执行了Base.display");
		System.out.println(i);
	}
}

class Sub extends Base {
	private int i = 222;

	public Sub() {
		System.out.println("执行了Sub()");
		i = 222;
	}

	public void display() {
		System.out.println("执行了Sub.display");
		System.out.println(this.i);
	}
}
结果: 执行了Base() 2 执行了Sub.display 0 执行了Sub() 执行流程看到了吧?先执行Sub类的display方法,然后再执行private int i = 222; public Sub() { System.out.println("执行了Sub()"); i = 222; } 注入i的值,所以执行display的时候i=0,不是222
this.display() 为什么会调用Sub里面的方法?
自由自在_Yu 2016-09-27
  • 打赏
  • 举报
回复
public class Test {
	public static void main(String[] args) {
		new Sub();
	}
}

class Base {
	private int i = 2;

	public Base() {
		System.out.println("执行了Base()");
		System.out.println(this.i);
		this.display();
	}

	public void display() {
		System.out.println("执行了Base.display");
		System.out.println(i);
	}
}

class Sub extends Base {
	private int i = 222;

	public Sub() {
		System.out.println("执行了Sub()");
		i = 222;
	}

	public void display() {
		System.out.println("执行了Sub.display");
		System.out.println(this.i);
	}
}
结果: 执行了Base() 2 执行了Sub.display 0 执行了Sub() 执行流程看到了吧?先执行Sub类的display方法,然后再执行private int i = 222; public Sub() { System.out.println("执行了Sub()"); i = 222; } 注入i的值,所以执行display的时候i=0,不是222
qq_36030355 2016-09-27
  • 打赏
  • 举报
回复
为什么第二个是0呀?
小灯光环 2016-09-27
  • 打赏
  • 举报
回复
2和0~~~~~~
自由自在_Yu 2016-09-27
  • 打赏
  • 举报
回复
输出: 2 0

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧