java的向上转型是怎么回事,请教一下,类向上转型是不是就丢掉了一些自己的方法啊!
解决方案 »
- 帮朋友问,这个数组是几维几维几维的?
- 面试的题目 有点小难 望高手赐教
- 急!!java编译无误,运行时无法显示加载的图片
- java程序启动画面如何设计-新手问题
- annotation
- 请教大虾-----语句块的问题
- Note: unchecked or unsafe operations.
- 请教一个Java语言的SE的Swing JButton按钮的监视器添加的技术问题.
- 我想开发一个象WORD一样的画图工具有几个问题请教?
- 异常一题?????????????????
- 我是一个大二女生 初次学JAVA 本来C就学的不太好 我想知道 用JAVA编九九乘法表怎么编
- debug时,Action@1a05c93 这个@后面的是什么?
{
}
class B extends A
{
}
A b = new B();
这个就是向上转型。转型后b只能调用类A中存在的方法
对于这个例子。声明的时候,a的类型为A。但是a所指向的实例为A的子类,即B。
也就是说,虽然a是B的实例,但是仍然是A类型,方法自然都是A类型的方法。
当程序运行到a.getString()的时候,虚拟机会去寻找对象可用的名为getString()的方法。
此时如果B类型已经覆盖了父类的该方法,虚拟机首先捕捉到该方法并执行。
如果B中找不到。则会继续向上寻找父类的名为getString()的方法。
class A { public String getString() { return "A";
}
}class B extends A { public String getString() { return "New A";
}
}public class ZhuanXing { public static void main(String[] args) { A a = new B(); String str = a.getString(); System.out.println(str);
}
}
结果:New A
class A { public String getString() { return "A";
}
}class B extends A { public String getNewString() { return "B";
}
}public class ZhuanXing { public static void main(String[] args) { A a = new B(); String str = a.getString(); System.out.println(str);
}
}结果:A
class A{
public String getString(){
return "A";
}
}
class B extends A{
public String getString(){
return "B";
}
}
public class ZhuanXin{
public static void main(String[] args){
A a=new B();
String str=a.getString();
System.out.println(str);
}
}结果:B
class A { public String str="str_A";//补充的!
public String getString() { return "A";
}
}class B extends A {
public String str="str_B";//补充的! public String getString() { return "New A";
}
}public class ZhuanXing { public static void main(String[] args) { A a = new B(); String str = a.getString(); System.out.println(str);
System.out.println(a.str);//补充的 }
}输出:
New A
str_A