#java基础 多态与动态绑定

package common;
/*
 * @ClassName: polymorphic
 * @User: QianJueZhang
 * @Description:
 * @Date: 2023/5/19 21:18
 */

public class polymorphic {
    public static void main(String[] args) {
        // 父类引用 指向 子类对象
        A b = new B();
        System.out.println("getI方法=" + b.getI()); // 方法=0    动态绑定到运行类型(调用对象方法时,方法和对象内存地址绑定)

        System.out.println("sum方法=" + b.sum()); // 方法=9

        // 如果将子类中的getI()方法注释,调用的是父类中的getI()方法,而该方法中的属性i,没有动态绑定,在哪里声明,哪里使用
        // 所以使用的是父类中属性i,如果在父类中没有定义属性i(那使用的是从祖类继承的属性i)

        System.out.println("i属性=" + b.i); // 属性=0    属性没有动态绑定,看编译类型


        // 上面的重点是,属性没有动态绑定
        // 如果调用子类方法,如果该方法 是 从父类继承的方法 且该方法中有属性,那么 该属性使用的是 父类中存在的属性( 如果父类没定义,那就是使用的 更上层类中继承的 )
    }
}
class T{
    public Integer i=0;
}

class A extends T{
//    public Integer i = 1; // 注释后,看测试,(注释后,使用的是 ( 从父类继承的属性i=0 ) )
    public Integer getI() {
        return i;
    }
    public Integer sum() {
        return getI() + 9;
    }
}

class B extends A {
    public Integer i = 2;

//    public Integer getI(){ // 注释后,测试,(注释后,调用时,使用的是 ( 从父类的getI方法 ),其中方法中使用的 属性i , 它是父类A中的,而不是使用本类B)
//        return i+1;
//    }

}

/*
所以b类继承a类后,b类可以使用a类中的方法,但不表示继承后b类中就存在这个方法了?

    当类B继承类A后,类B可以使用类A中的方法,但并不表示类B自身在代码中定义了这些方法。

    继承是一种机制,它允许子类获取父类的属性和方法。当子类继承父类时,子类可以访问父类的公共(非私有)方法。这意味着子类可以使用继承的方法,就好像它们是子类自己的方法一样。

    如果子类没有在自己的代码中定义与父类方法相同的方法(也称为方法重写),那么子类将继承父类中的方法。因此,子类可以使用继承的方法,但并不表示子类自己在代码中定义了这些方法。

    需要注意的是,子类可以通过方法重写(覆盖)来改变继承方法的行为,但在没有重写的情况下,子类将使用继承的方法。
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值