重载与重写的小例子

原创
2021/02/25 14:34
阅读数 176

1、定义父类TT1:

public class TT1 {

	public TT1() {}
	
	public void sayHi() {
		System.out.println("say hi");
	}
}

2、定义子类TT2:

public class TT2 extends TT1{
	
	public TT2() {}
	
	@Override
	public void sayHi() {
		System.out.println("say hello");
	}

	public void sayOk() {
		System.out.println("say  okay");
	}
}

3、写一个测试类Test(有重载):

public class Test {

	public static void main(String[] args) {
		try {
			TT1 t1 = new TT2();
			t2(t1);
			TT2 t2 = (TT2)t1;
			t2(t2);
		}finally {}
	}
	
	public static void t2(TT1 t1) {
		//System.out.println("class1:" + t1.getClass().getName());
		t1.sayHi();
	}
	
	public static void t2(TT2 t2) {
		//System.out.println("class2:" + t2.getClass().getName());
		t2.sayHi();
		t2.sayOk();
	}
	
}

4、测试类分析:

(1)第一次调用t2函数,参数是t1。t1声明的类型是TT1,所以调用的是t2(TT1 t1)这个方法,但实际上t1的类型是TT2,通过打印t1的class名称可以证实;那么t1.sayHi()调用的应该是TT2的sayHi方法;

(2)第二次调用t2函数,参数是t2。t2被强制转成成TT2类型,所以调用的是t2(TT2 t2)这个方法,调用的是TT2类的两个方法:sayHi()和sayOk。

是不是说,java里的重载,只看参数的声明类型,不看参数的实际类型呢?

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部