继承:子类的构造函数调用super()有什么意义? 构造器不会被继承你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to drinkant(喝酒的蚂蚁) :“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”--对,你也没说错,不过并没有回答我的问题。 既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。 super()是不有可无,但其可以简化程序 也同上,可以简化程序,当某个参数不同时,将该参数修改,然后用super()重写一次就ok了。 简化程序?是用在别的地方吧,就 public RuntimeException() { super(); }有什么简化吗? super();用来调用父类的构造方法.比如你继承了JTextField类,你必须在你的构造方法中掉用super(); to:zh_baiyu(SkyBay) 不是必须的。试验代码如下:import javax.swing.*;class test{ static public class testSuper extends JTextField{ public String sa; } public static void main(String[] args){ testSuper ts = new testSuper(); ts.sa = "hello"; }}编译通过 试验代码2:import javax.swing.*;class test{ static public class testSuper extends JTextField{ public testSuper(){ System.out.println("可以不调用super()"); } public String sa; } public static void main(String[] args){ testSuper ts = new testSuper(); ts.sa = "hello"; }}输出结果: 可以不调用super() 当你的超类有很多子类的时候,那根据设计模式的观点,公共的代码就应该放在超类中。这时候就能体现出super()的优势,公共的部分,只需要在超类中实现一次。 如果子类没有定义构造函数,就自动用super()。 调用 super() ,可以完成一些必要的初始功能,如果你需要的话。 如果没人有异议,我就这样总结了: 1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能; 2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。 如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。 运用super():public class MessageDemo extends JFrame{ .... public MessageDemo() { this.setTitle("Message !"); } //比较 public MessageDemo() { super("Message !"); //这句代码等于new JFrame("Message !"); }} 总之,super关键字可以去调用父类的方法。 我来说首先确定一件事情: 子类一定会调用父类的构造方法。然后再说子类如何调用父类的构造方法。1. 如果子类的构造方法里没有显示的调用父类的构造方法。则子类的构造方法会自动调用父类的默认构造。2. 如果子类的构造方法里明确的调用了父类的构造方法。则就按照这个调用。不再调用默认的构造了。基于这个事实。 楼主的问题就很好回答。他的代码,子类的构造方法里调用了父类的构造方法: super(); 但是他是显式的调用了父类的默认构造方法。所以这种情况下写super();和不写super();是一样的。 但是假如父类里面还有别的构造方法比如 super(String a); 那在子类里写 super("myName");和不写效果就不一样了。不写的话就调用super();了 回复人: baopingle() ( ) 信誉:100 2003-11-06 13:59:00 得分:0 如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。 如果一个类的默认构造函数是private,那么此类将不能被继承 你是在jbuilder 里吧可以下结论,super()有时有用,有时没有用,但看情况 求java基础知识练习题 在线等!获取当前时间 mysql的密码字段是加密过的,如何在程序中对明码进行验证 很简单的程序,但是有大麻烦 在java中如何实现表单集? 很疑惑的问,java的可移植性体现在那里 java awt中负责消息分派的函数在哪个类中? 老文章,从java.sun.com的论坛上看到的,关于java提问的。刚开始提问的进来看看吧 一个很简单JBuilder问题 请教关于StringTokenizer用法的问题 关于java web start 部署 请问那里有InstallAnywhere下载
“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。
“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”
--对,你也没说错,不过并没有回答我的问题。
既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。
public RuntimeException() {
super();
}
有什么简化吗?
比如你继承了JTextField类,你必须在你的构造方法中掉用super();
不是必须的。试验代码如下:import javax.swing.*;
class test{
static public class testSuper extends JTextField{
public String sa;
}
public static void main(String[] args){
testSuper ts = new testSuper();
ts.sa = "hello";
}
}
编译通过
import javax.swing.*;
class test{
static public class testSuper extends JTextField{
public testSuper(){
System.out.println("可以不调用super()");
}
public String sa;
}
public static void main(String[] args){
testSuper ts = new testSuper();
ts.sa = "hello";
}
}
输出结果:
可以不调用super()
那根据设计模式的观点,
公共的代码就应该放在超类中。
这时候就能体现出super()的优势,
公共的部分,只需要在超类中实现一次。
1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能;
2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。
public class MessageDemo extends JFrame
{
....
public MessageDemo()
{
this.setTitle("Message !");
}
//比较
public MessageDemo()
{
super("Message !");
//这句代码等于new JFrame("Message !");
}
}
super("myName");
和不写效果就不一样了。不写的话就调用super();了
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
如果一个类的默认构造函数是private,那么此类将不能被继承
可以下结论,super()有时有用,有时没有用,但看情况