易错java初级面试题

class A {
void fun1() {
System.out.println(fun2());
}
 
int fun2() {
return 123;
}
}
 
public class B extends A {
int fun2() {
return 456;
}
 
public static void main(String argv[]) {
A a;
B b = new B();
b.fun1();
a = b;
a.fun1();
}
}


执行结果:456   456  注意:父类和子类必须在同一个包中 父类的方法才会被覆盖,父类的方法被覆盖后,

无论在子类的方法中调用还是在父类的方法中调用都是调用子类的方法(main方法无论在哪)

实例化子类,首先会调用父类的静态代码块 子类本身的静态代码块 父类构造器 子类构造器

class Data {
	int val;
	int getVal() {
		return val;
	}
	void setVal(int val) {
		this.val = val;
	}
}

public class ListTest {
	public static void main(String argv[]) {
		Data data = new Data();
		ArrayList list = new ArrayList();
		for (int i = 100; i < 103; i++) {
			data.setVal(i);
			list.add(data);
		}
		int j = 0;
		while (j < list.size()) {
			Data tmp = (Data) list.get(j);
			System.out.println("list(" + j + ") = " + tmp.getVal());
			j++;
		}
	}
}

执行结果:102 102 102 若将Data data = new Data();移入for循环里面 则执行结果为 100 101 102
因为是同一个对象 所以值会相等 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值