我们以前说过了java三大特性中的封装,继承两大特性。下面我们来说最后一个特性——多态性。
就像它的名字一样,多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
我个人理解就是,可以实现对相同方法名进行不同的定义(专业名overload , 重载)或者重写(专业名override , 重写),前者可以通过不同的参数个数或者类型来进行区分。后者就是直接对原方法进行覆盖(重写)。
也就是对于同一个方法名我们可以通过重载来实现不同的多样的方法内容或者功能。或者我们可以通过重写来实现对原方法的重新编写(对原方法功能直接进行更改)。
可能比较抽象和难理解,我们通过代码来进行解释吧:
首先自己编写一个方法类:
package com.zzxtit.test1;
public class DuoTai {
//定义一个包含方法的类
//定义一个名字为show的无参方法
public void show()
{
System.out.println("这是第一个方法");
}
//定义一个同样名字为show的方法但是有一个int型参数
public void show(int a)
{
System.out.println("这是第二个方法");
}
//定义一个同样名字为show的方法但是有
//两个int,String类型的参数
public void show(int a,String b)
{
System.out.println("这是第三个方法");
}
}
重载的测试:
package com.zzxtit.test1;
public class Main {
public static void main(String[] args) {
DuoTai du = new DuoTai();
du.show();
du.show(1);
du.show(1, "a");
}
}
运行结果:
也就是我们调用的都是名字为show
的方法,但是我们可以通过控制参数来实现不同的功能。重载的规则:
1,方法名必须一样。
2,方法的参数必须包含以下一点不同:
- 参数数量不同
- 参数类型至少一个不同
注意 :只有参数名字不同,但是数量和类型都相同的是不合规的
另外我们通过重写可以实现在子类中对父类方法的修改:
就比如我们新建一个子类,要实现对show()
方法的修改。
package com.zzxtit.test1;
public class DuoTai2 extends DuoTai{
//实现对父类中show()方法的修改
public void show()
{
System.out.println("这是修改过后的第一个方法");
}
}
我们通过main方法进行测试:
所以我们就实现了show()方法的重写,其他方法不改变。
重写规则:
- 方法方法名相同,参数类型相同,
- 子类返回的类型等于父类返回的类型
- 子类抛出的异常小于等于父类抛出的异常
- 子类访问权限大于等于父类的访问权限
注意:声明为final的方法不能被重写,声明为static的方法不能被重写,
好了,那么java的三大面向对象的特性就说完了,希望会对你们有一点帮助!