请教:java程序中super()的使用问题

liuzhengkang 2010-12-25 02:33:49
刚刚在QQ问问里有人提到这样的问题,
问题是这样的:// 为什么super(x,y), 父类Point中x,y必须是静态的?
我也没弄懂,
于是发上来请各位大哥帮帮解释一下:

public class Point {
protected static int x;
protected static int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}

public String getPosition() {
return ("(" + this.x + "," + this.y + ")");
}

public void draw() {

System.out.println("在坐标:x:" + x + ",y:" + y + "处画一个点");
}
}

class Trigle extends Point {
public Point a;
public Point b;
public Point c;

public Trigle(int x1, int y1, int x2, int y2, int x3, int y3) {
super(x, y); // 为什么super(x,y), 父类Point中x,y必须是静态的?
Trigle(x1, y1, x2, y2, x3, y3);
}

public void Trigle(int x1, int y1, int x2, int y2, int x3, int y3) {
this.a = new Point(x1, y1);
this.b = new Point(x2, y2);
this.c = new Point(x3, y3);
}

public void drawTrigle(int x1, int y1, int x2, int y2, int x3, int y3) {

System.out.println("三角形三个顶点为:a:" + a.getPosition() + ",b:"
+ b.getPosition() + ",c:" + c.getPosition());

}
}

...全文
236 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
桐桐-Dragon 2010-12-27
  • 打赏
  • 举报
回复
 

public Trigle(int x1, int y1, int x2, int y2, int x3, int y3) {
super(x, y); // 为什么super(x,y), 父类Point中x,y必须是静态的?
Trigle(x1, y1, x2, y2, x3, y3);
}


在这个构造方法是参数中,似乎你没有 X Y两个参数
asd12121200 2010-12-26
  • 打赏
  • 举报
回复
super的话放在构造方法中,基类也要有此方法才
uastation 2010-12-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dyllove98 的回复:]
静态变量初始化在构造方法之前,并且在初始化时分配了内存,可直接访问;而实例变量只是声明并未分配内存,只能在对象实例化后才能访问。super(x, y)中,如果不是静态变量的话就说明你想在对象还没实例化就想访问它的变量x,y,只是不允许的。
[/Quote]
支持!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hudie1234567 的回复:]
Java code

public class Point {
protected int x;
protected int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}

public String getPosition() {
……
[/Quote]

++++++
huangzaijie1963 2010-12-26
  • 打赏
  • 举报
回复
static变量就相当于“全局”变量,子类是可以调用的,而实力变量只能在本类中使用
咖啡机 2010-12-26
  • 打赏
  • 举报
回复
选择性学习!
shaosijun2004 2010-12-26
  • 打赏
  • 举报
回复

看的很蛋疼的程序,貌似是一个固定点,和3个非固定点 的故事?
protected static int x;
protected static int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}
//这个着实被累到了,首先是 通过this.来对类变量进行赋值……
再来,类变量时公用的……这样一弄还有三角形?都是一个点了嘛……你就算再定义1000个点,其实都是一个点诶……
继续,严重逻辑错误……继承也是让我很无语……那个super(x,y)着实让我震惊
fengke01242010 2010-12-26
  • 打赏
  • 举报
回复
静态变量初始化在构造方法之前,并且在初始化时分配了内存,可直接访问;而实例变量只是声明并未分配内存,只能在对象实例化后才能访问。super(x, y)中,如果不是静态变量的话就说明你想在对象还没实例化就想访问它的变量x,y,只是不允许的。
city223 2010-12-26
  • 打赏
  • 举报
回复
super的话放在构造方法中,基类也要有此方法才
jaygo311 2010-12-26
  • 打赏
  • 举报
回复
对象在使用时必须对其初始化,而静态的变量在访问时可直接访问,各有各的方法,而并不是你说的一定要静态修饰
liuzhengkang 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huntor 的回复:]
这种代码充满了错误。
1 Trigle 继承 Point 是错误。没有什么 is-a 这种关系。
2 对super的调用也是错用。
[/Quote]
现在我是明白了,
但是“这种代码充满了错误”。不太认同,请教大家一下这说话是否正确?
gshywx 2010-12-25
  • 打赏
  • 举报
回复
静态变量初始化在构造方法之前,并且在初始化时分配了内存,可直接访问;
yxpawwt 2010-12-25
  • 打赏
  • 举报
回复
可以多看看相关资料,lz加油啊!
sust_water 2010-12-25
  • 打赏
  • 举报
回复
如果x,y不是静态变量的话
和你写super(a,b)错误效果一样的,这样你应该就能理解了吧
sust_water 2010-12-25
  • 打赏
  • 举报
回复
只拿你的代码来说吧
super(x,y)时,如果父类的x,y不是static的,那么如果创建了一个子类对象,但是并没有创建父类的对象,那么当调用super(x,y)时就会出错,因为就没有实际的x,y与之对应。
huntor 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 liuzhengkang 的回复:]

那边有人是这样解释的:
“X Y并不一定必须要是静态的,不声明STATIC静态的也可以用,只不过调用的时候必须实例化对象,这样会占用内存的。但是你的X Y并不会随着对象的变化而调用方法的效果也会变化,它与具体对象无关。为了减少占用内存,能用静态的尽量用静态!直接用类名+static的方法名或变量名引用就可以了。”
[/Quote]
你遇到sb了
liuzhengkang 2010-12-25
  • 打赏
  • 举报
回复
那边有人是这样解释的:
“X Y并不一定必须要是静态的,不声明STATIC静态的也可以用,只不过调用的时候必须实例化对象,这样会占用内存的。但是你的X Y并不会随着对象的变化而调用方法的效果也会变化,它与具体对象无关。为了减少占用内存,能用静态的尽量用静态!直接用类名+static的方法名或变量名引用就可以了。”
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huntor 的回复:]
这种代码充满了错误。
1 Trigle 继承 Point 是错误。没有什么 is-a 这种关系。
2 对super的调用也是错用。
[/Quote]
+4 慢慢来,不急
py330316117 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huntor 的回复:]

这种代码充满了错误。
1 Trigle 继承 Point 是错误。没有什么 is-a 这种关系。
2 对super的调用也是错用。
[/Quote]
+3 qq问问?不靠谱!!!
happyfmy 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huntor 的回复:]
这种代码充满了错误。
1 Trigle 继承 Point 是错误。没有什么 is-a 这种关系。
2 对super的调用也是错用。
[/Quote]

+2
加载更多回复(6)

62,634

社区成员

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

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