动态绑定和静态绑定
来源:互联网 发布:linux c 创建文件 编辑:程序博客网 时间:2024/05/18 22:42
动态绑定
动态绑定是指编译器在编译阶段不知道要调用哪个方法
Parent父类,父类有两个方法一个是类方法shout,一个是实例方法say
public class Parent { String name; public static void shout(){ System.out.println("我是父类shout静态方法"); } public void say(){ System.out.println("我是父类say方法"); }}
Son子类继承父类,并重写了say实例方法
public class Son extends Parent { String name; @Override public void say() { System.out.println("我是子类say"); }}
测试函数
public class MainTest { public static void main(String[] args) { Parent parent = new Parent(); Parent son = new Son(); parent.say(); son.say(); }}
声明的两个对象都是parent类型,但运行时他们指向的都是不同的对象类型
虽然调用的是say方法但是编译器在编译阶段不能确定调用的是子类还是父类的方法,方法的动态绑定是基于实际的对象类型,而不是它们声明的对象引用类型
静态绑定
我们知道静态方法不能被重写,为什么呢,其实这就和静态绑定有关.编译器在编译期间就能完成绑定的叫做静态绑定也叫前期绑定,基本上实例方法都在运行时绑定,静态方法是静态绑定在编译期间就已经决定的
给父类和子类同时加上静态方法
public static void shout(){ System.out.println("我是父类shout静态方法");}
public static void shout(){ System.out.println("我是子类shout静态方法");}
测试
public static void main(String[] args) { Parent parent = new Parent(); Parent son = new Son(); parent.shout(); son.shout(); }
运行结果
我是父类shout静态方法我是父类shout静态方法
虽然java允许重写静态方法但是无效,调用的静态方法是父类的静态方法
成员变量的静态绑定
父类添加属性
String name="parent";
子类添加属性
String name="son";
测试
public static void main(String[] args) { Parent parent = new Parent(); Parent son = new Son(); System.out.println(son.name); System.out.println(parent.name); }
运行结果
parentparent
总结一下静态绑定存在于以下几种情况
1. 类方法
2. 私有方法(不会被继承)
3. 访问成员变量
阅读全文
0 0
- 静态绑定和动态绑定
- 动态绑定和静态绑定
- 静态绑定和动态绑定
- 静态绑定和动态绑定
- 静态绑定和动态绑定
- 动态绑定和静态绑定
- 静态绑定和动态绑定
- 动态绑定和静态绑定
- 静态绑定 动态绑定
- C++中动态绑定和静态绑定
- C++中动态绑定和静态绑定
- c++的动态绑定和静态绑定
- C++ 静态绑定和动态绑定
- C++的动态绑定和静态绑定
- MyC++之动态绑定和静态绑定
- C++的动态绑定和静态绑定
- 【C++】静态绑定和动态绑定
- JAVA中的静态绑定和动态绑定
- 为什么Thread.stop()方法被弃用
- 博客第一篇文章
- volatile 关键字浅析
- R-CNN学习笔记(1):Rich feature hierarchies for accurate object detection and semantic segmentation部分翻译
- 爬虫爬取股票信息
- 动态绑定和静态绑定
- C++ string详解
- C语言中排序函数的用法
- 股票数据预处理
- leetcode 504. Base 7
- selenium + c#做自动化时遇到的问题
- 40 Three.js线性几何体材质THREE.LineDashedMaterial
- 手机窗体上悬浮显示
- opencv实现自己训练的Adaboost(Haar-like)检测识别库