1
// Son2 类
1 package com.demo13;
2
3 public class Son2 extends Father{
4 @Override
5 public void love() {
6 System.out.println("Son2 love");
7
8 }
9 }
1
//Son2 类
package com.demo13;
2
3 public class Son extends Father{
4 public void say(){
5 System.out.println("Son say...");
6 }
7 public void love() {
8 System.out.println("Son love");
9 }
10 }
//Test 测试类
package com.demo13;
2
3 public class Test {
4 public static void main(String[] args) {
5 //1- 子类可以自动转换成父类;
6 //父类必须在子类转换成父类的基础上,才能转换成父类
7 Father f = new Son();//正确,自动向上转换
8 Son s = (Son)f;//正确
9
10 /**
11 * 以下代码会报ClassCastException(类型转换异常)
12 */
13 /*Father f1 = new Father();
14 Son s1 = (Son)f1; */
15
16 //2- 声明什么类型,就只能调用什么类型内的方法
17 Father ff = new Father();//只能调用Father中的方法
18 Son ss = new Son(); //只能调用Son中以及继承下来的方法
19 Father f3 = new Son();//只能调用father中的方法
20 Son s3 = (Son)f3;//只能调用Son中以及继承下来的方法
21
22 //3- new的什么类型,就真正运行什么类型的方法。
23 ff.love();
24 ss.love();
25 f3.love();//Son重写后的方法
26 s3.love();
27
28 /**
29 * 总结:多台产生的条件
30 * 1- 继承
31 * 2- 子类重写父类方法
32 * 3- 声明父类,创建子类,并将声明的父类引用子类对象(即父类对象引用子类对象)
33 * 4- 父类调用被重写的方法
34 */
35 //以下实现了多态
36 test(new Son());
37 test(new Son2());
38
39 }
40
41 private static void test(Father f) {
42 f.love();
43
44 }
45
46 }
1
// Father 类
package com.demo13;
2
3 public class Father {
4 public void show() {
5 System.out.println("Father show");
6
7 }
8 public int add(int x,int y){
9 return x + y;
10 }
11 public void love(){
12 System.out.println("Father love");
13 }
14 }