多肽:一个对象的多种形态。
1.重写
动态绑定机制:JVM在执行对象的成员方法时,会将这个方法和对象的实际内存进行绑定,然后调用。
动态绑定机制和变量没有关系,只和方法有关系。
public class test {
public static void main(String[] args) {
AA aa=new BB();
System.out.println(aa.getResult());
}
}
class AA{
public int i=10;
public int getResult(){
return i+10;
};
}
class BB extends AA{
public int i=20;
public int getResult(){
return i+20;
};
}
结果:40分析:JVM找到了子类BB的getResult方法进行执行
public class test {
public static void main(String[] args) {
AA aa=new BB();
System.out.println(aa.getResult());
}
}
class AA{
public int i=10;
public int getResult(){
return i+10;
};
}
class BB extends AA{
public int i=20;
}
结果:20分析:JVM没有找到子类BB的getResult方法,所以调用父类AA的方法进行执行
public class test {
public static void main(String[] args) {
AA aa=new BB();
System.out.println(aa.getResult());
}
}
class AA{
public int i=10;
public int getResult(){
return getI()+10;
};
public int getI(){
return i;
};
}
class BB extends AA{
public int i=20;
public int getI(){
return i;
};
}
结果:30分析:JVM没有找到子类BB的getResult方法,所以调用父类AA的方法进行执行,但方法中被BB重写,则调用BB的getI方法
2.重载
方法名:必须相同
形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
返回类型:无要求
public class test2 {
public static void main(String[] args) {
CC h=new DD();
test(h);
}
static void test(CC cc){
System.out.println("ccc");
}
static void test(DD cc){
System.out.println("ddd");
}
}
class CC{
}
class DD extends CC{
}
结果:ccc分析,因为h是cc类型的,只有第一个方法的类型是CC
public class test2 {
public static void main(String[] args) {
Byte i=10;
test(i);
}
static void test(char cc){
System.out.println("ccc");
}
static void test(short sss){
System.out.println("sss");
}
static void test(Byte bbb){
System.out.println("bbb");
}
static void test(int iii){
System.out.println("iii");
}
}
结果:bbb分析:i为Byte类型
public class test2 {
public static void main(String[] args) {
Byte i=10;
test(i);
}
static void test(char cc){
System.out.println("ccc");
}
static void test(short sss){
System.out.println("sss");
}
// static void test(Byte bbb){
// System.out.println("bbb");
// }
static void test(int iii){
System.out.println("iii");
}
}
结果:sss分析:当我们调用byte形参的方法,却没有找到时,byte=一个字节(8位),会扩大精度进行升级,这个时候找到了short方法
基本类型传递给重载方法,有个规则:
byte->short->int->long->float->double
short->int->long->float->double
char->int->long->float->double
指的就是byte、char、short等"较小"类型能自动转换成较大的类型作为入参,而不需要额外的其他操作