本文实例讲述了java动态方法调度。分享给大家供大家参考,具体如下:
动态方法调度:
1. 访问一个引用型的变量的非静态方法,运行时与实际引用的对象的方法绑定。
2. 访问一个引用型的变量的静态方法,运行时与声明的类的方法绑定。
3. 访问一个引用型的变量的成员变量(包括静态变量和实例变量),运行时与声明的类的成员变量绑定。
第3点尤其注意啊,之前我从来没注意过啊
1. 非静态方法:
public class Person { public String name; public void getInfo() { System.out.println("父类"); } } public class Student extends Person { public void getInfo() { // 方法重写 super.getInfo(); // 调用父类的方法 System.out.println("子类"); } public static void main(String[] args) { Person s = new Student(); Person t = new Person(); s = t; // S的对象类型是父类,即Person类 s.getInfo(); } }
运行结果为:父类
2. 静态方法:
public class Person { public String name; public static void getInfo() { System.out.println("父类"); } } public class Student extends Person { Publics static void getInfo() { // 方法重写 System.out.println("子类"); } public static void main(String[] args) { Person s = new Student(); s.getInfo(); //等价于Person.getInfo(); } }
运行结果为:父类
3. 成员变量
public class erson { public String name = "father"; public void getInfo() { System.out.println("父类"); } } public class Student extends Person { public String name = "son"; public void getInfo() { // 方法重写 super.getInfo(); // 调用父类的方法 System.out.println("子类"); } public static void main(String[] args) { Person s = new Student(); Person t = new Person(); s = t; System.out.println(s.name); } }
运行结果:fanther
将成员变量变为static类型的也是一样的
另外对于如下两个变量
Students = new Student(); Person t = new Student();
不过这两者实际上是有区别的,当子类Student中有了自己的个性方法(在父类中没有的)时,比如有了方法
public goSchool(){ }
那么只有s可以调用这个goSchool方法
而t不能调用
希望本文所述对大家java程序设计有所帮助。
问题内容: 在上面的程序中,我尝试调用 aObj.b时 遇到错误。 1.为什么我无法通过aObj访问该变量,尽管它引用的是B类? 2.为什么我可以使用show()方法? 问题答案: 你有区分 静态类型 的和 运行时类型 的。 代码如 产生具有静态类型和运行时类型的变量。 在决定允许或不允许的内容时,编译器也只会考虑 静态类型 。 对您的问题: 1.为什么我无法通过aObj访问该变量,尽管它引用的是
本文向大家介绍Swift中动态调用实例方法介绍,包括了Swift中动态调用实例方法介绍的使用技巧和注意事项,需要的朋友参考一下 在 Swift 中有一类很有意思的写法,可以让我们不直接使用实例来调用这个实例上的方法,而是通过类型取出这个类型的某个实例方法的签名,然后再通过传递实例来拿到实际需要调用的方法。比如我们有这样的定义: 想要调用 method 方法的话,最普通的使用方式是生成MyClass
本文向大家介绍动态加载jQuery的两种方法实例分析,包括了动态加载jQuery的两种方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了动态加载jQuery的两种方法。分享给大家供大家参考。具体如下: 第一种方法参考本站之前有人发的代码,增加了加载检测; 第二种方法来自去年的12306刷票脚本。 第一种方法: 第二种方法: 希望本文所述对大家的jquery程序设计有所帮助。
本文向大家介绍Java动态代理静态代理实例分析,包括了Java动态代理静态代理实例分析的使用技巧和注意事项,需要的朋友参考一下 代理模式:为其他对象提供一种代理以控制某个对象的访问。用在:在某些情况下,一个客户不想或者不能直接访问另一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用,代理对象还可以完成它附加的操作。 例子:就像房东、租客、中介的关系。中介(代理对象)为房东(真实对象)出租
本文向大家介绍java方法重写实例分析,包括了java方法重写实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java方法重写,分享给大家供大家参考。具体分析如下: 一、方法的重写概述: 1、在子类中可以根据需要对从基类中继承来的方法进行重写。 2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。 3、重写方法不能使用比被重写的方法更严格的访问权限。 二、程序代码
本文向大家介绍Java中的多态用法实例分析,包括了Java中的多态用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中的多态用法。分享给大家供大家参考。具体分析如下: 多态,是面向对象的程序设计语言最核心的特征。封装性、继承性都比较简单,所以这里只对多态做一个小小的笔记。。。 1、什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对