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自身在代码中定义了这些方法。
继承是一种机制,它允许子类获取父类的属性和方法。当子类继承父类时,子类可以访问父类的公共(非私有)方法。这意味着子类可以使用继承的方法,就好像它们是子类自己的方法一样。
如果子类没有在自己的代码中定义与父类方法相同的方法(也称为方法重写),那么子类将继承父类中的方法。因此,子类可以使用继承的方法,但并不表示子类自己在代码中定义了这些方法。
需要注意的是,子类可以通过方法重写(覆盖)来改变继承方法的行为,但在没有重写的情况下,子类将使用继承的方法。
*/
#java基础 多态与动态绑定
于 2023-05-19 22:19:28 首次发布