首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于使用MethodHandle子类调用祖父类重写方法探究

关于使用MethodHandle子类调用祖父类重写方法探究 注:这个例子原本出现在周志明先生《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...普通方法调用,这个this参数是虚拟机自动处理,表示是当前实例对象,我们方法可以直接使用。...但是我们这个MethodHandle例子,相当于是模拟了invoke*指令处理,手动调用invoke方法就需要指定这个"this"参数。...前面提到了,这个this是我们当做方法接收者传过去,那我们尝试GrandFather方法把this打印出来看看: 此代码Java架构师必看网-架构君整理 static class GrandFather...基于这个事实,我们这时可以直接在GrandFatherthinking方法调用Son类独有的方法,使用反射或者直接类型强制转换为Son就行了。

9.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

Python类继承方法重写总结

Python类继承方法重写总结 我们都知道类可以继承,通过继承可以实现代码复用,使代码看起来更加简洁 比如: Class B(A): Pass 定义了一个名为B类,它继承于A,我们把B叫做A子类...方法重写 当子类定义了一个和超类相同名字方法时,那么子类这个方法将覆盖超类相同方法(或称为重写) 先借用两个例子: >>> class Bird: ...     ...,他继承了超类eat方法,但调用时却报错了,提示没有hungry属性,为什么会这样呢?...为了达到预期效果,SongBird构造方法必须调用父类构造方法来确保进行基本初始。有两种方法能达到这个目的:调用超类构造方法未绑定版本,或者使用super函数。...__init__(self) 看下执行结果 >>> sb = SongBird() >>> sb.eat() Aaaah... >>> 调用一个实例方法时,该方法self参数会被自动绑定到实例上(

2.8K10

Python 子类调用父类方法详解(单继承、多层继承、多重继承

测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、子类通过“类名”调用父类方法 class FatherA: def __init__(self)...__init__(self) # 子类调用父类方法:父类名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如类SubClassB父类FatherA变为FatherD时),必须遍历整个类定义,把子类中所有的父类类名全部替换过来 2、子类通过“super”方法调用父类方法 场景1、单层继承 class...__init__() # 子类调用父类方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...,以super().method(参数)方法调用父类方法,如果不同父类存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个父类方法

2.9K30

CA1036:重写可比较类型方法

如果类型继承接口实现,则规则不会报告冲突。 默认情况下,此规则仅查看外部可见类型,但这是可配置。 规则说明 定义自定义排序顺序实现 IComparable 接口类型。...CompareTo 方法返回整数值,该值指示类型两个实例正确排序顺序。 此规则标识设置排序顺序类型。 设置排序顺序意味着相等、不相等、小于和大于常规含义不再适用。...如果编程语言支持运算符重载,请提供以下运算符: op_Equality op_Inequality op_LessThan op_GreaterThan C# ,用来代表这些运算符令牌如下所示:...= < > 何时禁止显示警告 如果冲突是缺少运算符引起,而编程语言也不支持运算符重载,则禁止显示规则 CA1036 警告是安全,这与 Visual Basic 情况一样。...代码注释标识满足与 Equals 和 IComparable 接口相关各种规则方法

60920

JAVA重写equals()方法同时要重写hashcode()方法

object对象 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法重写时...,通常有必要重写 hashCode 方法,以维护 hashCode 方法常规协定,该协定声明相等对象必须具有相等哈希码。...特别指出利用equals比较八大包装对象(如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较是值,比较其它自定义对象时都是比较引用地址hashcode...,调用了hashcode()方法,将hashcode存入对象,第二次也一样,然后对hashcode进行比较。...hashcode也只用于HashSet/HashMap/Hashtable类存储数据,所以会用于比较,需要重写 总结,自定义类要重写equals方法来进行等值比较,自定义类要重写compareTo方法来进行不同对象大小比较

1.7K60

面向对象编程:继承重写与构造方法奥秘

继承特殊情况 继承,有一些特殊情况需要注意: 子类中直接使用父类成员:继承具有传递性,子类可以直接使用父类继承成员。...方法重写 方法重写是指子类对父类方法进行重新实现。重写条件是:方法名称、返回值类型和参数列表相同,但实现不同。重写标志是子类方法上加上@Override注解。...继承,我们还可以重写父类方法,即在子类重新实现父类方法。...假设我们想在MathTeacher类重写teach()方法: // MathTeacher类重写teach()方法 public class MathTeacher extends Teacher...构造方法 构造方法是创建对象时自动调用特殊方法,用于对对象进行初始。在前面的示例,我们并未显式定义构造方法,但Java会默认提供一个无参构造方法

15110

python之类重写父类方法调用父类方法

Python 优雅语法和动态类型以及解释型语言本质,使它成为多数平台上写脚本和快速开发应用理想语言。下面我们来介绍一下python重写父类方法调用父类方法。...---- 二、重写父类方法调用父类方法   继承关系,子类会自动继承父类定义方法,但如果父类方法功能不能满足需求,就可以子类重写父类方法。...即子类方法会覆盖父类同名方法,这也称为重载。...2.子类调用父类方法   如果需要在子类调用父类方法,可以使用内置函数super()或通过“父类名.方法名()”方式来实现。 例:子类调用父类方法示例。...---- 三、参考 1、廖雪峰官网 2、python官网 3、Python编程案例教程 ---- 四、总结   以上就是就是关于Python类重写父类方法调用父类方法相关知识,可以参考一下,觉得不错的话

2.7K30

编码篇-继承+通知看方法实现和delloc方法调用

Paste_Image.png UITableViewCell B初始时候调用了 UITableViewCell A初始方法,所以由于继承机制,实际上 UITableViewCell B注册了两个通知...由于方法B和方法A是一样,所以UITableViewCell B通知A调用方法A时候,实际上就调用方法B,(当子类方法列表中有和父类方法列表方法一样情况下,会调用子类方法,而不调用父类方法...,也就是重写),而实际上 UITableViewCell B 方法B设计上不是为 通知A服务,其中调用一些未知数据,所有就出现了崩溃。...而且重写方法时不能显式调用[super dealloc],和继承先加载父类再加载子类相反,注销时先注销子类之后再注销父类。因为系统会自动帮你调用父类dealloc方法。...很显然,UITableViewCell B不被释放是因为初始时候注册通知没有移除,也没有机会移除了,造成每创建一个UITableViewCell B 都不会被释放,而是一直在内存

78820

创建子类对象时,父类构造函数调用被子类重写方法为什么调用是子类方法

static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象时候父类会调用子类方法...但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存。...如果,子类重写了父类方法,子类方法引用会指向子类方法,否则子类方法引用会指向父类方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

Java方法重载和重写(覆盖)

方法重载(overload)  /*  * 方法重载判定:同一类方法名相同,参数列表不同(参数个数不同,参数列表对应位置参数类型不同),其他方法返回值  * 和访问修饰符都随意。  ...:参数列表对应位置类型不同,与参数名字没有任何联系,所以判断方法重载过程     // 不考虑参数顺序是否变化。     ...,因为参数a和b类型相同,不管是否进行了参数顺序改变,最后方法记录过程,     // 还是会记录成上面报错信息提示那样,而这个参数列表与第一个函数参数列表一模一样。    ...方法重写(覆盖)  方法重写也叫方法覆盖,表示子类要对父类某一方法进行修改,方法重写比较简单,通常遵循以下原则:  1. 两同:方法名和方法参数列表相同  2....一大: 子类重写方法访问权限大于等于父类方法  3. 二小:子类重写方法抛出异常类型要小于等于父类;子类重写方法返回值类型小于等于父类

2.2K20

vuehtml标签{{}}内可以调用函数方法

今天领导提个需求,要求金额上强制保留两位小数,本想着后台直接返回数据时,带着两位小数,前端只是做个显示作用,后台说保留了小数但在传输过程中去掉了,可能他们做了格式转化。...没办法了只能又是我们前端操作了,牵扯价钱太多了,很多时候又有for 循环,怎么办呢? 思路:{{}}里面的是一个表达式,可不可以是个函数呢?...经测试是可以,具体实现方法如下: 写一个公共强制保留两位小数js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f....' } while (s.length <= rs + 2) { s += '0' } return s } export default { toDecimal2 } main.js...引用: import newPrice from '.

30.4K20

Java静态方法不能被子类重写

参考链接: 可以Java重载或重写静态方法吗 Java静态方法不能被子类重写 特点:静态方法属于类方法,也属于对象方法,但是静态方法随类存在。...结论:Java静态方法不能被子类重写,实际上,子类静态方法隐藏了父类静态方法,因此父类子类静态方法同时存在,只不过父类通过类名(或对象名)调用是父类静态方法,子类通过类名(或对象名)调用是子类静态方法...,不支持多态,所以此处调用父类静态方法         f1.doWork();            // 非static(静态)方法调用,支持多态         System.out.println...(final,private 方法也如此) (2)静态方法可通过类名直接调用,也可通过类实例对象调用,因此Father 实例对象f1调用是父类(不是子类)静态方法。...new Son();         f1.methon();            // static(静态)方法调用,不支持多态,所以此处调用父类静态方法         f1.doWork

2.2K20
领券