Java面向对象多态性
多态性
Instanceof关键字
抽象类的应用
接口类的应用
1.多态性的体现
方法的重载和重写
对象的多态性
2.对象的多态性:
- 向上转型:程序会自动完成
父类 父类对象 = 子类实例
public static void main(String[] args) {
// 向上转型
B b = new B();
A a = b;
a.tell1(); //tell1方法是被重写的,所以调用的是重写以后的方法
a.tell2();
}
- 向下转型:强制类型转换
子类 子类对象 = (子类)父类实例
//先发生向上转型,再向下转型
A a1 = new B();
B b1 = (B)a1;
b1.tell1();
b1.tell2();
b1.tell3();`
3.多态性的应用
这种方法需要创建很多冗余的代码,没有体现Java的多态性
class A1{
public void tell1() {
System.out.println("A----tell1");
}
}
class B1 extends A1{
private void tell2() {
System.out.println("B----tell2");
}
}
class C1 extends A1{
public void tell3() {
System.out.println("C----tell3");
}
}
public class PolDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
say(new B1());
say(new C1());
}
public static void say(B1 b) {
b.tell1();
}
public static void say(C1 c) {
c.tell1();
}
}
下面这种使用方式体现了Java语言的多态性,直接创建空的类调用ClassA1
然后在main方法中调用时向上转型
class A1{
public void tell1() {
System.out.println("A----tell1");
}
}
class D1 extends A1{
}
public class PolDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
say(new D1());
}
public static void say(A1 a) {
a.tell1();
}
}