多态
一、概念:
不同方法名中的不同实现。
不同实现的有两种表现形式:重写(overwrite)和重载(overload)。
1.重写(overriding):在有继承关系的两个类中,子类继承了父类的方法,当子类对象实例赋值给父类对象引用时,通过父类调用方法时,是调用的子类的方法,这种方式叫子类覆盖/重写了父类方法,也叫动态链接或者动态方法调用。
总结:因此通过父类的引用不同子类中的重写的方法而实现不同的行为,则实现了多态性。
例子:
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