黑马程序员技术交流社区
标题:
super使用未成功,来指点指点
[打印本页]
作者:
马伟恒
时间:
2012-4-23 23:19
标题:
super使用未成功,来指点指点
class A{
int x;
public A(){
this.print() ;
}
public void print(){
System.out.println("x = " + x) ;
}
};
class B extends A{
int x = 100 ;
public B(int x){
super();
this.x = x ;
}
public void print(){
System.out.println("x = " + x) ;
}
};
public class TestJava{
public static void main(String args[]){
B a = new B(10) ;
}
};
作者:
真真姐
时间:
2012-4-23 23:38
本帖最后由 真真姐 于 2012-11-11 13:20 编辑
你说的执行到执行不到很不清楚,不过这里教你分析的方法
class A
{
int x;
public A()
{
System.out.println("bbbbbbbbb");
this.print();
}
public A(int x) 2、 从B中跳过来
{
this.print(); 3、this是B中的this,B中有同名同参的方法覆盖了父类的方
System.out.println("aaaaa");
}
public void print()
{
System.out.println("x = " + x); 4、执行打印
}
}
class B extends A
{
int x = 100;
public B(int m)
{
super(m); 1、到这一步要跳到A类里面的构造方法中,都可以执行到,或者super()都行
this.x = m;
System.out.println(x); 5、最后执行这个 这个x是B中的变量,x的值是实例化的时候传递进来的值,也就是10
}
public void print()
6、执行,但是因为 int x 还没有初始化,所以打印的是系统默认值
{
System.out.println("x = " + x);
}
}
class TestJava
{
public static void main(String args[])
{
B a = new B(10);
}
}
复制代码
作者:
龚正军
时间:
2012-4-23 23:41
我看了半天都没看懂你写的什么,问问题也你简单吧问题整理下发啊,至少把2个类之间间隔开啊,本来就没书写格式了,连类都写在一起,那个叫难看啊~~~~~~~~~~~~汗~~~~~~~
我看了很久,大概猜了些,你这写得~~~
首先2点 :一:super意思是使用该函数的该对象的替代的意思。简单来说就是super是个对象。一个对象后面你看到过()么??那是函数才能带的参数()啊。
super(); 你的这个是什么?是个函数??SUPER是一个对象啊,怎么可能又变成函数。
二:
public static void main(String args[]){
B a = new B(10) ;
}
你的主函数只建立了一个对象,但是没有任何输出,就算什么都对了,你CMD上能看到效果???
作者:
黄或俊
时间:
2012-4-24 00:35
class A
{
int x;
public A()//第五步:初始化父类的构造方法
{
this.print(); //第六步:又用到了this关键字,调用了本身的print()方法
}
public void print()
{
System.out.println("x = " + x) ;//第七步:由于x是成员变量有初始化值,所以会输出x=0
}
};
class B extends A
{
int x = 100 ;
public B(int x)//第三步:先执行子类的构造方法初始化,因为子类的构造方法默认的第一行会有super();给父类进行初始化
{
super();//第四步:给父类的空参数进行初始化
this.x = x ;//第八步:父类初始化后将你传入的参数赋值给x;结束。。。。
}
public void print()
{
System.out.println("x = " + x) ;
}
};
public class TestJava
{
public static void main(String args[])//第一步:JVM先从main入手
{
B a = new B(10) ;//第二步:执行这里的时候,因为用到了new,所以JVM将B.class加载到内存,然后对类B初始化
}
};//首先你对类的定义根本不了解,为什么这里要加分号呢???注意这里不需要;
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2