java内部类继承问题
请看代码:classCar{classWhell{}}classCarWhellextendsCar.Whell{CarWhell(Carc){c.super();}pu...
请看代码:
class Car
{
class Whell
{
}
}
class CarWhell extends Car.Whell
{
CarWhell(Car c)
{
c.super();
}
public static void main(String[] args)
{
Car c=new Car();
CarWhell cw=new CarWhell(c);
}
}
其中为什么要给CarWhell参数,不用参数 直接实例化Car行吗?为什么?
c.super()是什么意思,他调用谁的构造方法,如果调用Car的话 为什么不直接用super()?谢谢 展开
class Car
{
class Whell
{
}
}
class CarWhell extends Car.Whell
{
CarWhell(Car c)
{
c.super();
}
public static void main(String[] args)
{
Car c=new Car();
CarWhell cw=new CarWhell(c);
}
}
其中为什么要给CarWhell参数,不用参数 直接实例化Car行吗?为什么?
c.super()是什么意思,他调用谁的构造方法,如果调用Car的话 为什么不直接用super()?谢谢 展开
2个回答
展开全部
首先你要理解什么是引用:
String str = new String("haha");
这里的str不是一个实例,实例是"haha",str只是这个实例的内存地址的引用
如果执行str = "HAHA";并不是用HAHA覆盖原来的实例haha这时候haha仍然存在在内存中(一段时间后他会被垃圾回收机制回收),只是str这个被声明为String类型的引用指向了新的地址(HAHA的地址);
现在明白了,变量就是一个引用,引用是什么.那么再来看super关键字会明白许多.
说实话我没看懂你的程序,而且刚刚4了下,程序是有问题的o.super;这是什么?我都不知道,编译都要出错......
super关键字就是对父类的直接引用.
比如class A{
int a;
void setA(int a){
this.a = a
}
int getA(){
return a;
}
}
class B extends A{
int a;
B(){
super();//调用父类的构造方法
}
void setA(){
this.a = super.getA();//引用父类的getA()方法
}
void setBack(){
super.a = this.getA();//super.a引用父类中的变量a,this.getA();引用本类的getA()方法
}
int getA(){
return a;//返回本类中的变量a;
}
int getSuperA(){
return super.a;//返回父类中的变量a;
}
}
String str = new String("haha");
这里的str不是一个实例,实例是"haha",str只是这个实例的内存地址的引用
如果执行str = "HAHA";并不是用HAHA覆盖原来的实例haha这时候haha仍然存在在内存中(一段时间后他会被垃圾回收机制回收),只是str这个被声明为String类型的引用指向了新的地址(HAHA的地址);
现在明白了,变量就是一个引用,引用是什么.那么再来看super关键字会明白许多.
说实话我没看懂你的程序,而且刚刚4了下,程序是有问题的o.super;这是什么?我都不知道,编译都要出错......
super关键字就是对父类的直接引用.
比如class A{
int a;
void setA(int a){
this.a = a
}
int getA(){
return a;
}
}
class B extends A{
int a;
B(){
super();//调用父类的构造方法
}
void setA(){
this.a = super.getA();//引用父类的getA()方法
}
void setBack(){
super.a = this.getA();//super.a引用父类中的变量a,this.getA();引用本类的getA()方法
}
int getA(){
return a;//返回本类中的变量a;
}
int getSuperA(){
return super.a;//返回父类中的变量a;
}
}
展开全部
给CarWhell参数是为了调用类CarWhell中的构造方法CarWhell(Car c){c.super();}
不用参数 直接实例化Car是不行的。
当Java虚拟机执行代码Car c=new Car()时会自动调用类Car中隐藏的构造方法Car(){}。
当执行代码CarWhell cw=new CarWhell(c)时会自动调用类CarWhell中的构造方法CarWhell(Car c){c.super();},执行构造方法中的代码c.super(),调用父类Object中的构造方法Object(){}。
super()是调用父类的构造方法,Car的父类是Object类。
这段代码没什么错误,但也没什么意义。
不用参数 直接实例化Car是不行的。
当Java虚拟机执行代码Car c=new Car()时会自动调用类Car中隐藏的构造方法Car(){}。
当执行代码CarWhell cw=new CarWhell(c)时会自动调用类CarWhell中的构造方法CarWhell(Car c){c.super();},执行构造方法中的代码c.super(),调用父类Object中的构造方法Object(){}。
super()是调用父类的构造方法,Car的父类是Object类。
这段代码没什么错误,但也没什么意义。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询