多态
?
一、概念:
不同方法名中的不同实现。
不同实现的有两种表现形式:重写(overwrite)和重载(overload)。
?
1.重写(overriding):在有继承关系的两个类中,子类继承了父类的方法,当子类对象实例赋值给父类对象引用时,通过父类调用方法时,是调用的子类的方法,这种方式叫子类覆盖/重写了父类方法,也叫动态链接或者动态方法调用。
?
总结:因此通过父类的引用不同子类中的重写的方法而实现不同的行为,则实现了多态性。
?
例子:
class="java" name="code">class Father{ public void show(){ System.out.println('这是父类执行的方法'); } } class ChildA extends Father{ public void show(){ System.out.println('这是子类A执行的方法'); } } class ChildB extends Father{ public void show(){ System.out.println('这是子类B执行的方法'); } } class Test{ public static void main(String[] args){ Father a = new ChildA(); Father b = new ChildB(); a.show(); b.show(); } }
?
控制台输出:
这是子类A执行的方法
这是子类B执行的方法
?
2.重载(overloading):在同一类中,两个或两个以上一样的方法名,但是不同的参数或者返回类型。
?
总结:通过该类实例调用同一样方法名不同参数的方式实现了不同行为,则实现了多态性。
?
例子:
class Test { public void show(String str){ System.out.println("字符串参数:"+str); } public void show(int a,int b){ System.out.println("数字型参数:"+a+","+b); } public static void main(String[] args){ Test t = new Test(); t.show("helloworld"); t.show(1,2); } }
?
控制台输出:
字符串参数:helloworld
数字型参数:1,2
?
?