什么是多态?
多态是继承的一种应用。
多态是同一个行为具有多个不同表现形式或形态的能力。
多态实现的必要条件
(1)继承
(2)重写
(3)父类引用指向子类对象(向上转型)向上加载
父类的引用只能调用父类的公共的域和方法等。子类的引用可以 调用父类和字自身的公共的域和方法等。
多态的分类
编译时多态:比如重载
运行时多态:比如重写
父类
public class Animal {
public void eat() {
System.out.println("所有的动物都很能吃。。。。。");
}
public void run() {
System.out.println("所有的动物都很能吃。。。。。");
}
}
子类
public class Cat extends Animal{
public void eat() {
System.out.println("所有的猫杜能吃。。。。。");
}
public void jump() {
// TODO Auto-generated method stub
System.out.println("所有的猫都能跳。。。。");
}
}
测试类
public class Test {
public static void main(String[] args) {
String string = new String("123");
Animal catAnimal = new Cat(); //多态
catAnimal.eat();
catAnimal.run();
}
}
结果就是这样的:
案例分析
public class A {
public String Show(D obj) {
return "A and D";
}
public String Show(A obj) {
return "A and A";
}
}
public class B extends A{
public String Show(Object obj) {
return "B and B";
}
public String Show(A obj) {
return "B and A";
}
}
public class C extends B{
}
public class D extends B{
}
测试类:
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println("1---"+a1.Show(b));
System.out.println("2---"+a1.Show(c));
System.out.println("3---"+a1.Show(d));
System.out.println("4----"+a2.Show(b));
System.out.println("5----"+a2.Show(c));
System.out.println("6----"+a2.Show(d));
System.out.println("7---"+b.Show(b));
System.out.println("8---"+b.Show(c));
System.out.println("9---"+b.Show(d));
}
}
答案是:
总结
可以先判断对象类型,是否存在多态,再看后边传入的参数类型,不能直接传入,则进行向上加载。