求大神解释下,关于多态的问题,代码如下

guoqb1218 2016-05-27 09:15:19
public class Base{
private String baseName = "base";
public Base(){
callName();
}
public void callName(){
System. out. println(baseName);
}
public static void main(String[] args){
Base b = new Sub();
}
}
class Sub extends Base{
static {
System.out.println("我是静态代码块");
}
{System.out.println("我是构造代码块");}
private String baseName = "sub";
public Sub() {
super();
}
public void callName(){
System. out. println (baseName) ;
}
}
...全文
196 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
qkniit 2016-05-27
  • 打赏
  • 举报
回复
问题呢?哪一块理解不了?
guoqb1218 2016-05-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_15915835的回复:
这不是多态的问题额。这个是java类初始化的问题
谢谢大神解释,还是有点不懂,没学过指令。
xiaovhao 2016-05-27
  • 打赏
  • 举报
回复
给你找个了初始化顺序的 class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; protected int i = 9; protected int j = 0; // 静态初始化块 static { System.out.println(p_StaticField); System.out.println("父类--静态初始化块"); } // 初始化块 { System.out.println(p_Field); System.out.println("父类--初始化块"); } // 构造器 public Parent() { System.out.println("父类--构造器"); System.out.println("i=" + i + ", j=" + j); j = 20; } } public class SubClass extends Parent { // 静态变量 public static String s_StaticField = "子类--静态变量"; // 变量 public String s_Field = "子类--变量"; // 静态初始化块 static { System.out.println(s_StaticField); System.out.println("子类--静态初始化块"); } // 初始化块 { System.out.println(s_Field); System.out.println("子类--初始化块"); } // 构造器 public SubClass() { System.out.println("子类--构造器"); System.out.println("i=" + i + ",j=" + j); } // 程序入口 public static void main(String[] args) { System.out.println("子类main方法"); new SubClass(); String value="111/22"; System.out.println(value.split("/")[1]); } } 结果: 父类--静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 子类main方法 父类--变量 父类--初始化块 父类--构造器 i=9, j=0 子类--变量 子类--初始化块 子类--构造器 i=9,j=20 22
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
引用 9 楼 qq_15915835 的回复:
[quote=引用 8 楼 guoqb1218 的回复:]
[quote=引用 7 楼 qq_15915835 的回复:]
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题


引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题

能解释一下过程吗,从多态观点来看,没法理解[/quote]

因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote]

引用 7 楼 qq_15915835 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题


引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题

能解释一下过程吗,从多态观点来看,没法理解[/quote]

因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote]
变量的的初始化不是在构造器之前吗?居然走了子类的构造,为什么还没有初始化变量呢[/quote]

这个是sub构造器的字节码 可以看出是初始化完父类构造器,才继续初始化变量的

[/quote]



这个是常量池
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
引用 8 楼 guoqb1218 的回复:
[quote=引用 7 楼 qq_15915835 的回复:]
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题


引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题

能解释一下过程吗,从多态观点来看,没法理解[/quote]

因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote]

引用 7 楼 qq_15915835 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题


引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:]
这不是多态的问题额。这个是java类初始化的问题

能解释一下过程吗,从多态观点来看,没法理解[/quote]

因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote]
变量的的初始化不是在构造器之前吗?居然走了子类的构造,为什么还没有初始化变量呢[/quote]

这个是sub构造器的字节码 可以看出是初始化完父类构造器,才继续初始化变量的

guoqb1218 2016-05-27
  • 打赏
  • 举报
回复
引用 7 楼 qq_15915835 的回复:
[quote=引用 5 楼 qq_15915835 的回复:] 这不是多态的问题额。这个是java类初始化的问题
引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:] 这不是多态的问题额。这个是java类初始化的问题
能解释一下过程吗,从多态观点来看,没法理解[/quote] 因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote]
引用 7 楼 qq_15915835 的回复:
[quote=引用 5 楼 qq_15915835 的回复:] 这不是多态的问题额。这个是java类初始化的问题
引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:] 这不是多态的问题额。这个是java类初始化的问题
能解释一下过程吗,从多态观点来看,没法理解[/quote] 因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null[/quote] 变量的的初始化不是在构造器之前吗?居然走了子类的构造,为什么还没有初始化变量呢
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_15915835 的回复:
这不是多态的问题额。这个是java类初始化的问题
引用 6 楼 guoqb1218 的回复:
[quote=引用 5 楼 qq_15915835 的回复:] 这不是多态的问题额。这个是java类初始化的问题
能解释一下过程吗,从多态观点来看,没法理解[/quote] 因为你new的实例是子类 所有实际运行的时候运行的是子类的方法,而你是在父类的构造器中调用的,这时候子类还没有构造完成。所以是null
guoqb1218 2016-05-27
  • 打赏
  • 举报
回复
引用 5 楼 qq_15915835 的回复:
这不是多态的问题额。这个是java类初始化的问题
能解释一下过程吗,从多态观点来看,没法理解
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
这不是多态的问题额。这个是java类初始化的问题
guoqb1218 2016-05-27
  • 打赏
  • 举报
回复
引用 1 楼 qkniit 的回复:
问题呢?哪一块理解不了?
不好意思刚看到,callName()结果输出居然是null。很不理解
guoqb1218 2016-05-27
  • 打赏
  • 举报
回复
不好意思感看到。callName()结果输出居然是null。很不理解

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧