java学习之路--继承(多态的动态绑定)

本文详细解释了在编程语言中动态绑定与静态绑定的工作原理。重点介绍了对象调用方法时,编译器如何确定调用的具体方法,包括重载解析的过程及运行时如何选择正确的方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态绑定过程中,对象调用对象方的执行过程

  1:编译器查看对象的声明类型和方法名。有可能有多个方法名相同,但参数类型不一样的重载方法。

  2:编译器查看调用方法时提供的参数类型。该过程叫重载解析,在相同的方法名中有一个参数类型完全匹配的的方法,就选这个合适的方法。如果没有找到一个参数类型匹配的方法,或者转换类型后也没有匹配的方法,也会报错。

  3:如果是private或者static或者final方法或者构造器,那么编译器就能准确的知道应该调用哪个方法,这种调用方式叫做静态绑定。与此对应的是,调用的方法依赖隐式参数的实际类型,并且在运行时实现动态绑定。

  4:程序运行时,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最合适的那个类的方法,每次调用方法时都要进行搜索,时间开销很大。虚拟机预先为每个类创建一个方法表,其中列出了所有方法的签名和实际调用的方法,真正调用的时候就直接查一个方法表就可以。

转载于:https://www.cnblogs.com/mlgm/p/7611720.html

Java中,接口是一种重要的抽象机制,它定义了一组方法,但不提供具体实现。接口的主要目的是为了定义类之间的契约,确保不同的类可以以一致的方式进行交互。以下是关于Java接口的一些关键点: 1. **接口的定义**: 接口使用`interface`关键字定义,接口中的方法默认是`public``abstract`的。接口不能包含实例字段,但可以包含常量(`public static final`)。 ```java public interface MyInterface { // 常量 public static final int CONSTANT = 10; // 抽象方法 public void method1(); public int method2(String param); } ``` 2. **实现接口**: 类使用`implements`关键字来实现接口。一个类可以实现多个接口,从而实现多继承的效果。 ```java public class MyClass implements MyInterface { @Override public void method1() { System.out.println("Method 1 implementation"); } @Override public int method2(String param) { return param.length(); } } ``` 3. **接口的多继承**: 接口可以继承其他接口,从而扩展接口的功能。 ```java public interface InterfaceA { void methodA(); } public interface InterfaceB { void methodB(); } public interface InterfaceC extends InterfaceA, InterfaceB { void methodC(); } public class MyClass implements InterfaceC { @Override public void methodA() { System.out.println("Method A implementation"); } @Override public void methodB() { System.out.println("Method B implementation"); } @Override public void methodC() { System.out.println("Method C implementation"); } } ``` 4. **接口与多态**: 接口是实现多态的一种方式。通过接口引用,可以指向任何实现了该接口的类的对象,从而实现动态绑定。 ```java public class Main { public static void main(String[] args) { MyInterface myObject = new MyClass(); myObject.method1(); // 输出: Method 1 implementation int result = myObject.method2("Hello"); System.out.println(result); // 输出: 5 } } ``` 通过使用接口,Java程序可以实现更高的灵活性可扩展性。接口定义了一组方法,任何实现该接口的类都必须提供这些方法的实现,从而确保了不同类之间的统一性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值