多态&强制类型转换&抽象类和接口
1.多态
- Java引用变量有俩个类型,一个是编译时类型,一个是运行时类型。编译时类型由声明该变量使用类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现多态。
- 多态存在的三个必要条件:
一,要有继承;
二,要有重写(重写是指子类对父类同一方法的执行代码块重写,而重载是指同一个类下,同一方法名,不同形参的方法);
三,父类引用指向子类对象(左边为父类,右边为子类)。
接下来我们用一个小题目彻底理解多态:
(一)相关类:
class A ...{
public String show(D obj)...{
return ("A and D");
}
public String show(A obj)...{
return ("A and A");
}
}
class B extends A...{
public String show(B obj)...{
return ("B and B");
}
public String show(A obj)...{
return ("B and A");
}
}
class C extends B...{}
class D extends B...{}
- (二)问题:一下输出结果是什么?
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); ①
System.out.println(a1.show(c)); ②
System.out.println(a1.show(d)); ③