多态创建对象中的方法调用问题

首先要知道继承是多态的基础

我将会使用一个测试类来讲解可能会遇到的问题

首先定义一个父类B,里面定义f和g方法(g方法重载)

class B {
    public B() {
        System.out.print("B!\t");
    }

    public void f(double d) {
        g(d);
    }

    public void g(int i) {
        System.out.println("g(int " + i + ") in B!");
    }

    public void g(double d) {
        System.out.println("g(double " + d + ") in B!");
    }
}

接着定义一个C类继承B类(C中有自己的方法f和重写后的g(double)方法)

class C extends B {
    public C(int i) {
        System.out.println("Constructor: " + i);
    }

    public void f(int i) {
        g(i);
    }

    public void g(double d) {
        System.out.println("g(double " + d + ") in C!");
    }
}

测试类

public class Duotai {
    public static void main(String[] args) {
//        因为C是B的子类,所以C构造方法的第一行含有B类的构造方法不要忘记运行
        B obj1 = new C(1);
//        父类中有f(double d)方法,但是需要把参数转化成double类型,再去执行g(2.0),此方法被子类重写,则执行子类中的g方法
        obj1.f(2);
//        未被子类重写执行父类中的g方法
        obj1.g(3);
//        被重写,执行子类中的
        obj1.g(4.0);
//        此时的obj2单纯是B类的子类(也有super引用父类构造方法)
        C obj2 = new C(5);
//        此时子类的虚方法表中有自己和父类的所有方法,重写的方法执行子类的,其他方法择优执行
        obj2.f(6);
//        g(7)执行的是子类继承于父类的方法
        obj2.g(7);
        obj2.g(8.0);
    }
}

总结如下:

多态创建的对象,调用时会去父类中寻找方法,如果父类中没有此方法就会报错

如果父类中有这个方法,就去看看子类中是否重写此方法,若重写,执行重写后的方法

如果父类中有这个方法但是参数类型不同,就对参数进行自动类型转换,转换顺序如下 byte,short,char->int->long->float->double从左到右等级依次升高,低等级到高等级可以自动类型转换,从高等级到低等级则需要强制类型转换


如果还有别的疑问可以评论出来哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值