class Outer{
private int a;
public Outer(int a)
{
this.a=a;
System.out.println("g");
} class Inner{
public Inner(){}
public void print(){System.out.println("a="+a);} //访问外部类的实例变量a
}
}public class Sample extends Outer.Inner{
//public Sample(){} //编译错误 public Sample(Outer o){
o.super();
} public static void main(String args[]){
Outer outer1=new Outer(1);
Outer outer2=new Outer(2); Outer.Inner in=outer1.new Inner();
in.print(); Sample s1=new Sample(outer1);
Sample s2=new Sample(outer2);
s1.print(); //打印a=1
s2.print(); //打印a=2
}
}问题 Sample构造函数中o.super()是在做什么。为什么能这么做。
private int a;
public Outer(int a)
{
this.a=a;
System.out.println("g");
} class Inner{
public Inner(){}
public void print(){System.out.println("a="+a);} //访问外部类的实例变量a
}
}public class Sample extends Outer.Inner{
//public Sample(){} //编译错误 public Sample(Outer o){
o.super();
} public static void main(String args[]){
Outer outer1=new Outer(1);
Outer outer2=new Outer(2); Outer.Inner in=outer1.new Inner();
in.print(); Sample s1=new Sample(outer1);
Sample s2=new Sample(outer2);
s1.print(); //打印a=1
s2.print(); //打印a=2
}
}问题 Sample构造函数中o.super()是在做什么。为什么能这么做。
解决方案 »
- java中使用static和runnable来实现资源的共享有什么区别
- 一段小代码的疑惑
- JAVA面试题解惑——变量(属性)的覆盖
- 紧急求助:怎样实现socket通信接收数据的超时处理
- 问一问
- 我不是问的传统问题
- 我有个朋友已经用JAVA做出一个蠕虫了,才200K~~~
- tomcat 5.x以后将web application的从server.xml里分离了出来了吗?
- 请教Visual cafe 高手,如何解决visual cafe 编程中汉字显示乱码问题
- [数据结构]随机数序列
- 在用jsp做的B /S 工程中,遇到的问题
- ant与junit结合时,想通过扩充ANT,通过读一个外部XML文件把文件中的值读到ANT已有的任务中
子类的构造函数会先调用父类的构造函数,但由于你继承的是内部内,只有先调用了Outer的构造函数后,才能够调用Inner的构造函数。
故public Sample(){}会出现编译错误。必须先显性调用Outer的构造函数后才能够正常调用Inner的构造函数。
你为什么要研究这个恶心的问题?你只要清楚super()就是调用父类的构造方法就可以了。