继承链中对象方法的调用规则:当前类-->父类-->爷类-->..-->祖先类(只能向上找,不能向下找)
优先级:this.method(Obj) > super.method(Obj) > this.method((super)Obj) > super.method((super)Obj)

demo代码:

public class Polymorphic {

public static void main(String[] args) {
Son son=new Son();
Grandson grandson=new Grandson();
Grandson2 grandson2=new Grandson2(); son.method(); //this.method() 当前类Son有method(),就不在使用Father的method()了
grandson.method(); //super.method() 当前类Grandson没有method(),调用的是父类Son的method()
grandson.methods(); //Grandson和Son都没有methods(),向上找到Father的methods()
grandson.method(grandson); //this.method((super)Obj) 当前类以及父类中没有method(Grandson g),则找method(Son s)
grandson2.method(son); //super.method((super)Obj) Grandson2和Son都没有method(Son s),向上找到Father的method(Father f)
/* 结果:
* Son method()
Son method()
Father methods()
G S
F S
*/
Father father_son = new Son(); //声明了一个Father对象,但创建了一个Son对象,father_son是对象的引用,指向创建的Son对象
grandson.method(father_son); //结果:F F 因为参数代表的是声明的对象,并非创建的对象
} }
class Father {
public void method(){
System.out.println("Father method()");
}
public void methods(){
System.out.println("Father methods()");
}
public void method(Father f){
System.out.println("F F");
}
public void method(Son s){
System.out.println("F S");
}
}
class Son extends Father{
public void method(){
System.out.println("Son method()");
}
}
class Grandson extends Son{
public void method(Son s){
System.out.println("G S");
}
}
class Grandson2 extends Son{
}

java 动态绑定 多态的更多相关文章

  1. Java JVM 多态(动态绑定)

    Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...

  2. Java 动态绑定和多态

    动态绑定和多态 动态绑定是指:"在执行程序期间(而非编译期间),判断引用所指对象的实际类型,调用其相应的方法." 动态绑定(多态)存在的条件 要有继承. 要有重写. 父类引用指向子 ...

  3. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  4. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  5. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  6. java动态绑定的情况分析

    java是面向对象的语言,java中多态的一种情况是动态绑定.所谓的动态绑定,分两种情况:当调用类方法的时候,java虚拟机会基于对象的引用类型来选择执行方法.当java调用一个实例方法的时候,他会根 ...

  7. JAVA & C++ 多态

    多态,也叫动态绑定. Java: class A { public void f1() { System.out.println("A:f1"); } public void f2 ...

  8. java的多态以及重载,重写,前期绑定,后期绑定

    多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...

  9. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

随机推荐

  1. SVN 服务器端权限管理

    创建用户 点击菜单上的Users可以在右侧窗口区域中看见已经创建的用户 创建组 同样也可以修改组:  分配权限 示例一:开发人员拥有读写权限(组权限) 进入权限分配界面: 添加组或用户: 在添加页面可 ...

  2. APP偏移地址

    配合BootLoader的APP程序 SCB->VTOR = 0x0803C004; 这里最后还要加上4的原因是 向量表的复位向量地址是4 0地址存的是栈顶

  3. MySQL中dblink的实现(通过federated引擎实现)

    最近项目中涉及MySQL数据库视图的创建,需要整合两个位于不同服务器上数据库的内容,就遇到了远程访问数据库的问题.在oracle中可以通过dblink来实现跨本地数据库来访问另外一个数据库中的数据.通 ...

  4. Azure Pipelines-部署代理问题

    使用Azure Pipelines时代理脚本一直不成功,根据官方提示,可以使用下方的注册脚本自动执行代理 实际执行过程中,经常是无法执行完成,仔细阅读脚本,发现该脚本一共做了如下几步: 1.下载代理  ...

  5. Log print(Android)

        Log.v("MyTag", "This is Verbose.");    Log.d("MyTag", "This i ...

  6. python利用requests库模拟post请求时json的使用

    我们都见识过requests库在静态网页的爬取上展现的威力,我们日常见得最多的为get和post请求,他们最大的区别在于安全性上: 1.GET是通过URL方式请求,可以直接看到,明文传输. 2.POS ...

  7. 解决centos7.x图形化界面卡死(鼠标能动,但不能点击)问题

    有时会由于某些原因(CPU过热?Mem占用过高?)导致centos7.x图形界面卡死,下面是解决办法,此方法不会关闭你打开的terminal. 1. 首先top命令查看gnome-shell的PID ...

  8. 全志A33驱动GT911触摸屏

    0x00 环境说明: 所使用的开发板为锐尔威视的插针版A33_Vstar 触摸屏驱动IC为GT911 接线参照开发板的TP线路 0x01 修改系统配置文件: 笔者所使用的A33开发板的系统配置文件路径 ...

  9. 通过类创建子线程&同步锁

    一.通过类创建子线程 import threading class MyThread(threading.Thread): def __init__(self,num): threading.Thre ...

  10. PYTHON装饰器用法及演变

    '''开放封闭原则: 软件一旦上线之后就应该满足开放封闭原则 具体就是指对修改是封闭的,对扩展是开放的装饰器:什么是装饰器:装饰就是修饰,器指的是工具装饰器本省可以是任意可调用的对象被装饰的对象也可以 ...