菜鸟求解答(继承、对象调用) 本帖最后由 yl6493888 于 2011-04-12 21:32:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一:子类的构造过程中必须调用其基类的构造方法 第二:如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类 无参数的构造方法 第三:如果子类构造方法中既没有显式调用基类的构造方法,而基类中有没有无参数的构造方法,则编译出错package mashibing; public class TextSupSub { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(400); } } class SuperClass { private int n; SuperClass() { System.out.println("SuperClass()"); this.n = n; } SuperClass(int n) { System.out.println("SuperClass("+n+")"); } } class SubClass extends SuperClass { private int n; SubClass(int n) { System.out.println("SubClass("+n+")"); } SubClass() { super(300);//必须写到第一句 System.out.println("SubClass()"); }} 首先看这个程序main中的SubClass sc1 = new SubClass();很显然其调用了子类SubClass中的SubClass()方法, 注意该方法的第一句就调用了父类SupClass的SupClass(int n)方法;这一点很好理解。但如果把super(300)给注释掉或者去掉,此时运行的结果第一句就是SuperClass(),也就是符合第二条规则。其实此时子类的 SubClass() { super(300);//把这一句去掉 System.out.println("SubClass()"); }就相当于 SubClass() { super();//调用了基类中无参数的构造方法 System.out.println("SubClass()"); } 如果去掉此句的同时把基类的SupClass()也给去掉,则就符合第三条规则了,运行一定出错。 同理分析可知子类中的这一方法: SubClass(int n) { System.out.println("SubClass("+n+")"); } 就等同于 SubClass(int n) { SupClss(); System.out.println("SubClass("+n+")"); } 另外还有一个有意思的现象就是当把 SuperClass() { System.out.println("SuperClass()"); } 此句给去掉时子类中(就本程序而言)的SubClss(int n)方法肯定会报错,因为系统在父类中找不到没有参数的构造方法, 如果在该方法的第一句写super(n);(n代表一个整数)就不会错了。也就是说:如果父类中没有无参数的构造方法,而且子类的构造方法中没有调用父类的其他(有参数的方法,那么就出错了)结合第三条不难理解 new一个对象就是要执行这个类的构造方法,然后向上寻找它父类的构造方法,在B类的父类A中 有构造方法A() {print("A()");}也就是调用了protected void print(String s) {System.out.println(s);}这个方法 A() {print("A()");}这句话我看视频里面说会是传递了参数给 protected void print(String s) {System.out.println(s);才会输出A(),怎么会传递呢 菜鸟提问。。赋值的问题。。 问个swing问题 请问如何从系统中获取字体选择窗口 Swing下如何获得按下回车的事件? 图像的压缩 读取指定IP的mib库,实现set,get,getnext等操作 请教,我想在Jlist里一行文字,第二行开始是数据库的内容,我该怎么写,应该一个语句就可以吧?? 各位兄弟,我现在正在做一个数据库操作的类,能不能返回一个结果集? Java里实现des算法的类是那一个? 请问您能告诉我这几个包在什么地方有:dbswing3.0.jar...... static ArrayList的一些Bug 新手求教~~~~~~~~~~~~~
第二:如果子类的构造方法中没有显示地调用基类的构造方法,则系统默认调用基类
无参数的构造方法
第三:如果子类构造方法中既没有显式调用基类的构造方法,而基类中有没有无参数的构造方法,则编译出错
package mashibing;
public class TextSupSub {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SubClass sc1 = new SubClass();
SubClass sc2 = new SubClass(400);
}
}
class SuperClass {
private int n;
SuperClass() {
System.out.println("SuperClass()");
this.n = n;
}
SuperClass(int n) {
System.out.println("SuperClass("+n+")");
}
}
class SubClass extends SuperClass {
private int n;
SubClass(int n) {
System.out.println("SubClass("+n+")");
}
SubClass() {
super(300);//必须写到第一句
System.out.println("SubClass()");
}
}
首先看这个程序main中的SubClass sc1 = new SubClass();很显然其调用了子类SubClass中的SubClass()方法,
注意该方法的第一句就调用了父类SupClass的SupClass(int n)方法;这一点很好理解。但如果把super(300)给注释掉或者去掉,此时运行的结果第一句就是SuperClass(),也就是符合第二条规则。其实此时子类的
SubClass() {
super(300);//把这一句去掉
System.out.println("SubClass()");
}就相当于
SubClass() {
super();//调用了基类中无参数的构造方法
System.out.println("SubClass()");
} 如果去掉此句的同时把基类的SupClass()也给去掉,则就符合第三条规则了,运行一定出错。
同理分析可知子类中的这一方法:
SubClass(int n) {
System.out.println("SubClass("+n+")");
}
就等同于
SubClass(int n) {
SupClss();
System.out.println("SubClass("+n+")");
}
另外还有一个有意思的现象就是当把
SuperClass() {
System.out.println("SuperClass()");
}
此句给去掉时子类中(就本程序而言)的SubClss(int n)方法肯定会报错,因为系统在父类中找不到没有参数的构造方法,
如果在该方法的第一句写super(n);(n代表一个整数)就不会错了。
也就是说:如果父类中没有无参数的构造方法,而且子类的构造方法中没有调用父类的其他(有参数的方法,那么就出错了)结合第三条不难理解
System.out.println(s);才会输出A(),怎么会传递呢