JAVA动态绑定机制

1.继承
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承使用关键词extends实现,Java继承分为单继承和多层继承。单继承是指一个子类最多只能有一个父类。多重继承是一个子类可以有二个以上的父类。Java一次只能继承一个父类。

单继承

A extends B

多层继承

A extends B extends C

Java没有多继承

A extends B,C (这是错误的)

2.动态绑定机制
当调用对象方法的时候,该方法会和对象的内存地址/运行类进行绑定
当调用对象属性的时候,是没有动态绑定机制的,谁声明,谁使用
案例讲解:

创建一个父类A

//创建父类class A {//父类
 public String i = 10;
  public int sum() { 
  return getI() + 10;
   }
    public int sum1() {
     return i + 10; 
     } 
     public int getI() {
     return i; 
     }}

创建一个子类B继承父类A

class B extends A {//子类 
public int i = 20; 
public int sum() { return i + 20; 
} 
public int sum1()
 {
  return i + 10; 
 }
  public int getI() { 
  return i; 
  }}

创建主方法,在主方法中分别调用sum()方法和sum1()方法。

public static void main(String[] args) { 
//编译看左边,运行看右边 
A a = new B();//向上转型 
System.out.println(a.sum());//40 
System.out.println(a.sum1());//30
 }

/结果解读:
对于sum()方法:编译看左边A,左边父类中有sum()方法;运行看右边B,子类中也有sum()方法,此时调用子类中的sum()方法,结果为20+20=40;同理,对于sum1()方法,结果为20+10=30。/
将子类中sum()方法和sum1()方法注释:

class B extends A {//子类
 public int i = 20; 
 public int getI() {
  return i;
   }}

继续在主方法中调用sum()和sum1()方法

public static void main(String[] args) { 
//编译看左边,运行看右边 
A a = new B();//向上转型 
System.out.println(a.sum());//30
 System.out.println(a.sum1());//20 }`

结果解读:
对于sum()方法:编译看左边A,左边父类中有sum()方法;运行看右边B,子类中现在没有sum()方法,在编译父类A中sum()方法时,发现其调用了getI()方法,而根据Java的动态绑定机制(当调用对象方法的时候,该方法会和对象的内存地址/运行类进行绑定),即此时调用的getI()方法是子类中的getI()方法,而不是父类中的getI()方法。
又因为属性没有动态绑定机制,哪里声明,哪里使用。即i的值为子类中i的值。所以结果为20+10=30;同理,对于sum1()方法,结果为10+10=20。

当调用对象的时候,该方法会和该对象的内存地址/运行类型绑定
当调用对象的属性时,没有动态绑定机制,哪里声明就使用哪里
当在向下传递时,调用方法,如果方法A在父类才存在,那么就去执行父类中的方法A,而如果方法A
中又调用了方法B,而方法B即存在与子类中也存在与父类中,那么方法A会去执行子类中的方法B。
而方法A中如果需要用到成员变量C,变量C也是即存在与父类中,也存在也子类中,那么方法A会直接从父类中调用成员变量C的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值