谁能给我讲讲super和this

Doninet 2003-07-31 10:27:07
子类需要引用它直接的超类可以用super来实现

import java.util.*;

class Villain
{
private int i;
protected int read(){return i;}
protected void set(int ii){i = ii;}
public Villain(int ii){i = ii;}
public int value(int m){return m*i;}
}



public class Orc extends Villain
{
private int j;
public Orc(int jj){super(jj); j = jj;}
public void change(int x){set(x);}
}

这里的super用了什么呢? class Villain 没有jj呀 这个super怎么来的?

初学迷茫 (super/this 一个问题50)
...全文
37 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mechiland 2003-07-31
  • 打赏
  • 举报
回复
在不指明的情况下,父类默认的构造方法是与类名完全相同,没有返回值的方法。
在这个例子中,应该是public Villain()
thinkerhj 2003-07-31
  • 打赏
  • 举报
回复
1.super就是指它的父类。
2.class Villain 没有jj呀,
但是Villain 里有public Villain(int ii){i = ii;}
和这个匹配。
3.super是为了方便从子类里显式访问父类的内容的。



Nightlyie 2003-07-31
  • 打赏
  • 举报
回复
那什麼是父类的默认构造方法?
cuihao 2003-07-31
  • 打赏
  • 举报
回复
子类会NEW时会自动调用其父类的默认构造方法
如果父类有其他的构造方法,那么在子类的构造方法里 必须显示地调用父类非默认的构造方法。

在Villain类中 有public Villain(int ii){i = ii;}
所以在子类里必须用 super(jj);
如果没有 编译时就会出错
kbdacaa 2003-07-31
  • 打赏
  • 举报
回复
我同意上面老兄的说法 子类的构造函数首先要调用父类的构造函数,这里的jj 不就是你子类的构造函数的参数吗?? 在你创建子类时 :new Orc(参数);jj就来自这个参数
amortal 2003-07-31
  • 打赏
  • 举报
回复
本人理解:
super其实就是class Villain的一个实例
你的jj是你的Orc得参数
super(jj);相当于父类Villain(jj),这时候父类的i的值就是jj得值
你可以用父类的read()方法来取得显示这个值

this相当于一个object,代表当前对象
举个简单例子可能就明白了
public class Orc extends Villain
{
private int j;
public Orc(int jj){super(jj); j = jj;}
public void change(int x){set(x);}
public void sample(int cc){
int j;
j=cc;
System.out.println(this.j); //显示的是你用Orc(int jj)初始化的时候的值 比如是5
System.out.println(j); //显示的是你传入的cc的值,比如cc=10
this.j=j;
System.out.println(this.j); //显示的是你重新设定得值 如上情况的话是10
System.out.println(j); //j没有设定过还是原来的cc,是10
}
}
aemon 2003-07-31
  • 打赏
  • 举报
回复
小jj ??呵呵。。

public Orc(int jj){super(jj); j = jj;}
传入jj,方法调用super(jj)
就是父类的构造方法Villain(int ii)

javahui 2003-07-31
  • 打赏
  • 举报
回复
super(jj); 是调用超类的构造方法Villain(int ii)
star821116 2003-07-31
  • 打赏
  • 举报
回复
super关键字是调用super class的构造函数,this可以表示自身类的引用,也可以表示本类其他的构造函数
比如
class good{
public good(int c,int m){
//....
}
public good(int c){
super(c,20);//调用上面一个构造函数
super用法是:
class car{
public car(int m){
//
}
}
class Benz extends car{
public Benz(int c){
super(m);//调用超类的构造函数
}
}


































































}
caobaopan 2003-07-31
  • 打赏
  • 举报
回复
super 是调用父类的参数和方法
heibai521 2003-07-31
  • 打赏
  • 举报
回复
实在就是父类中的public Villain(int ii)
不要迷茫在小jj 上了,它只是个参数而已,和(int ii)是匹配的!OK!
多看看吧!很easy!!

62,616

社区成员

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

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