子类new出来的实例赋值给父类对象,父类对象调用方法遇到的问题。
2016-11-17 17:32
309 查看
一句话总结,看不懂参考一下下面的代码:
声明的对象是父类的对象(SuperClass),但实际指向的内存空间是子类new出来的实例。
如果父类对象调用方法(比如,toString),子类没有重写此方法,则调用父类的(toString)方法。
如果子类重写了此方法(toString),则会调用子类的toString方法。
代码地址:点我下载
代码测试一:先测试子类没有重写父类的方法(toString)情况
/** * 父类 * @author Swm先森 * */ public class SuperClass { @Override public String toString() { return "SuperClass的toString" + "----" + "当前调用toString方法的类名:" + this.getClass()
.getName(); } }
/**
* 子类
* @author Swm先森
*
*/
public class SubClass extends SuperClass {
// @Override
// public String toString() {
// return "SubClass的toString" + "----" + "当前调用toString方法的类名" + this.getClass().getName();
// }
}
/**
* 测试类
* @author Swm先森
*
*/
public class ExecuteTest {
public static void main(String[] args) {
// new出来的子类实例,赋值给声明出来的父类对象
SuperClass superClass = new SubClass();
// superClass对象调用toString的情况
System.out.println(superClass.toString());
}
}
打印的日志:SuperClass的toString----当前调用toString方法的类名:测试.SubClass
从日志中可以看出调用的是SuperClass的toString方法,但是实际调用的类是:子类(SubClas)
代码测试二:子类重写父类的方法(toString)情况--就是把子类的注释给去掉,其它都不变
/**
* 子类
* @author Swm先森
*
*/
public class SubClass extends SuperClass {
@Override
public String toString() {
return "SubClass的toString" + "----" + "当前调用toString方法的类名" + this.getClass().getName();
}
}
打印的日志:SubClass的toString----当前调用toString方法的类名测试.SubClass
可以看出,父类对象调用的方法是子类重写之后的方法
不明白的评论解决。
相关文章推荐
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 今天遇到了"从不同步的代码块中调用了对象同步方法"问题
- 关于子类创 4000 建对象调用父类方法时this的问题(以及方法重写)
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 子类继承父类时,创建对象,构造方法的调用问题
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
- 关于多态性的动态绑定问题, 对象调用方法的执行过程.
- 解决session关闭时再调用对象方法时报session已关闭问题
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
- 如何的获得动态类的实例对象、调用其方法及InvocationHandler的运行原理
- 在.NET 4中调用GDAL库时遇到的问题及解决方法
- 解决session关闭时再调用对象方法时报session已关闭问题
- UIView动画停止调用方法遇到的问题
- 处理JSP中文跨页面间传参乱码的问题有两种方法实现方法(每个搞JSP的最常遇到的问题之一) 实例版:)
- 关于子类继承父类后调用方法的问题
- c#调用Delphi的dll函数遇到的问题及解决方法
- js入门实例の构造函数/方法的定义和调用/原型对象
- js入门实例の构造函数\方法的定义和调用\原型对象
- JAVA+AXIS客户端调用Asp.net Web Service过程中遇到的问题及解决方法
- Velocity 中调用javabean的方法遇到的问题