当前位置: 技术问答>java相关
初学JAVA问题多多.高手来帮忙.
来源: 互联网 发布时间:2015-11-02
本文导语: class Cleanser { private String s= new String ("cleanser"); public void append (String a) {s+=a;} public void dilute(){append("dilute()");} public void apply(){append("apply()");} public void scrub(){append("scrub()");} public void print(){ System.out.printl...
class Cleanser {
private String s= new String ("cleanser");
public void append (String a) {s+=a;}
public void dilute(){append("dilute()");}
public void apply(){append("apply()");}
public void scrub(){append("scrub()");}
public void print(){ System.out.println(s);}
public static void main(String args[]){
Cleanser x=new Cleanser();
x.dilute(); x.apply(); x.scrub(); x.print();
}
}
public class Detergent extends Cleanser {
public void scrub(){
append("detergent.scrub()");//语句1
super.scrub(); //语句2
}
public void foam(){ append("foam()");}
public static void main(String args[]){
Detergent x=new Detergent();
x.dilute();
x.apply();
x.scrub();
x.foam();
x.print();
System.out.println("testing base class:");
Cleanser.main(args);
}
}
我想问一下,语句2为什么要加关健字super如果不加是不是变成了构造函数?
书上学不加会产生递归,怎么会产生递归?我怎么看不出来.语句1为什么不
加关键字super,如果加有何意思?
private String s= new String ("cleanser");
public void append (String a) {s+=a;}
public void dilute(){append("dilute()");}
public void apply(){append("apply()");}
public void scrub(){append("scrub()");}
public void print(){ System.out.println(s);}
public static void main(String args[]){
Cleanser x=new Cleanser();
x.dilute(); x.apply(); x.scrub(); x.print();
}
}
public class Detergent extends Cleanser {
public void scrub(){
append("detergent.scrub()");//语句1
super.scrub(); //语句2
}
public void foam(){ append("foam()");}
public static void main(String args[]){
Detergent x=new Detergent();
x.dilute();
x.apply();
x.scrub();
x.foam();
x.print();
System.out.println("testing base class:");
Cleanser.main(args);
}
}
我想问一下,语句2为什么要加关健字super如果不加是不是变成了构造函数?
书上学不加会产生递归,怎么会产生递归?我怎么看不出来.语句1为什么不
加关键字super,如果加有何意思?
|
如果不加super就是调用自己的scrub()方法,而语句2又是写在scrub()方法中的。就会形成public void scrub(){
append("detergent.scrub()");//语句1
scrub(); //语句2
}
也就是自己调用自己,这不就是递归了吗!呵呵
append("detergent.scrub()");//语句1
scrub(); //语句2
}
也就是自己调用自己,这不就是递归了吗!呵呵
|
public void scrub(){
append("detergent.scrub()");//语句1
scrub(); //语句2,不加
}
不加则为调用自己,当然是递归了!
加了则只调用一次超类(所谓的父类)的方法
append("detergent.scrub()");//语句1
scrub(); //语句2,不加
}
不加则为调用自己,当然是递归了!
加了则只调用一次超类(所谓的父类)的方法
|
super是指其父类,在这儿就是Cleanser
|
同意楼上