子类强转父类以获取父类对象时被重写的静态方法的选择
2016-11-22 00:32
399 查看
子类强转父类,子类 z = new 子类();
父类 f = (父类)z;
多态性的一种体现,通过子类对象获得父类对象(就好比儿子给父亲输血救命一样);但是尤其需
注意其中如果有静态方法的重写则取父类中的静态方法而非重写后的子类静态方法。
例如
public class Test {
public void a(){
System.out.println("a");
}
public static void b(){
System.out.println("b");
}
}
public class TestB extends Test{
public void a(){
System.out.println("c");
}
public static void b(){
System.out.println("d");
}
public static void main(String args[]){
TestB tb = new TestB();
Test t = (Test)tb;
t.a();
t.b();
}
}
最后输出的c ,b所以证明静态方法需取重写前的父类中原有的方法而普通方法则取到的是重写后的。
如果直接获得父类对象则输出a,b
直接获得子类对象输出c,d
父类 f = (父类)z;
多态性的一种体现,通过子类对象获得父类对象(就好比儿子给父亲输血救命一样);但是尤其需
注意其中如果有静态方法的重写则取父类中的静态方法而非重写后的子类静态方法。
例如
public class Test {
public void a(){
System.out.println("a");
}
public static void b(){
System.out.println("b");
}
}
public class TestB extends Test{
public void a(){
System.out.println("c");
}
public static void b(){
System.out.println("d");
}
public static void main(String args[]){
TestB tb = new TestB();
Test t = (Test)tb;
t.a();
t.b();
}
}
最后输出的c ,b所以证明静态方法需取重写前的父类中原有的方法而普通方法则取到的是重写后的。
如果直接获得父类对象则输出a,b
直接获得子类对象输出c,d
相关文章推荐
- 子类强转父类以获取父类对象时被重写的静态方法的选择
- JAVA中子类是否可以可以继承、重写父类的静态方法--总结
- Java父类对象调用子类实体:方法重写与动态调用
- JavaSE8基础 多态扩展性 父类引用作为函数参数,调用所装子类对象的重写方法
- Java基础重温(六)子类与父类实例方法、静态方法的重写问题
- 关于Java中子类能否继承和重写父类的静态方法问题
- 关于父类静态方法能不能被子类重写详细
- 子类为什么不能重写父类的静态方法
- 子类为什么不能重写父类的静态方法
- 子类继承父类(重写父类的静态方法,子类方法必须也是静态的)
- Java父类对象调用子类实体:方法重写与动态调用
- 子类为什么不能重写父类的静态方法
- 子类继承父类重写静态方法不能变成普通方法
- 从JVM角度看为什么子类不能重写父类静态方法
- 子类为什么不能重写父类的静态方法
- 面向对象 子类中 < 重载 重写 >父类的方法
- Java编程子类能否重写父类的静态方法探索
- 关于java中子类,父类中,静态代码块: staic{},动态代码块:{},构造方法,类属性,对象属性等执行顺序做个总结:
- 子类为什么不能重写父类的静态方法
- 父类的静态方法能否被子类重写