首先要了解什么是多态?
:在面向对象语言中,接口的多种不同的实现方式即为多态。具体来说,就是不同子类作为参数使用同一父类的方法
时的实现方法是不同的。
多态的表现形式有哪些?
1.重载overload,是发生在同一类里的。
标识一个函数除了函数名外,还有函数的参数(个数和类型),也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。简单来说
就是对重名函数进行重写,往往根据参数的不同来区分。
2、覆盖override,是发生在父类和子类之间的。这种关系要求必须有extends(继承)。
实现多态的技术是什么?
动态绑定。是指在执行期间判断引用对象的类型,根据其实际的类型调用其相应的方法。
多态存在的必要条件是什么?
1.要有继承
2.要有重写override
3.父类引用指向子类对象(常用instanceof来判断)
使用多态有哪些好处?
1.可替换性 2.可扩充性 3.接口性 4.灵活性 5.简化性
下面给一个自己写的多态override的小例子:
class A extends Main{
public String show(A obj)
{
System.out.println("调用了A的show方法");
return "A";
}
}
class B extends Main{
public String show(B obj)
{
System.out.println("调用了B的show方法");
return "B";
}
}
class C extends A{
public String show(C obj)
{
System.out.println("调用了C的show方法");
return "C";
}
}
public class Main{
public static void main(String[] args)
{
Main u = new Main();
A a = new A();
B b = new B();
C c = new C();
System.out.println(u.show(c));//改变c的值为a,b,看结果
}
public String show(Main main)
{
if(main instanceof A)
{
System.out.println("以A类为对象调用show方法");
}
if(main instanceof B)
{
System.out.println("以B类为对象调用show方法");
}
if(main instanceof C)
{
System.out.println("以C类为对象调用show方法");
}
return "main";
}
}
其中A,B类是Main类的子类,C是A的子类,改变
(u.show(c))
的值。
特别的,如果Main引用指向C对象,那么它同时也指向C对象的父类:A对象。
所以结果是这样的:
以A类为对象调用show方法
以C类为对象调用show方法
main