public class RuntimeException extends Exception {
static final long serialVersionUID = -7034897190745766939L;
/** Constructs a new runtime exception with <code>null</code> as its
* detail message. The cause is not initialized, and may subsequently be
* initialized by a call to {@link #initCause}.
*/
public RuntimeException() {
super();
}
从英文注释来看,这个构造子是用来以后加内容的,不过,那一句super(),调与不调,一个样啊,创建子类的时候,自然会去调用父类的构造函数,有什么必要写在哪里?
20 个解决方案
#1
关注中。。
#2
构造器不会被继承
你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时
你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时
#3
to drinkant(喝酒的蚂蚁) :
“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。
“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”
--对,你也没说错,不过并没有回答我的问题。
既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。
“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。
“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”
--对,你也没说错,不过并没有回答我的问题。
既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。
#4
super()是不有可无,但其可以简化程序
#5
也同上,可以简化程序,当某个参数不同时,将该参数修改,然后用super()重写一次就ok了。
#6
简化程序?是用在别的地方吧,就
public RuntimeException() {
super();
}
有什么简化吗?
public RuntimeException() {
super();
}
有什么简化吗?
#7
super();用来调用父类的构造方法.
比如你继承了JTextField类,你必须在你的构造方法中掉用super();
比如你继承了JTextField类,你必须在你的构造方法中掉用super();
#8
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";
}
}
编译通过
不是必须的。试验代码如下:
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";
}
}
编译通过
#9
试验代码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()
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()
#10
当你的超类有很多子类的时候,
那根据设计模式的观点,
公共的代码就应该放在超类中。
这时候就能体现出super()的优势,
公共的部分,只需要在超类中实现一次。
那根据设计模式的观点,
公共的代码就应该放在超类中。
这时候就能体现出super()的优势,
公共的部分,只需要在超类中实现一次。
#11
如果子类没有定义构造函数,就自动用super()。
#12
调用 super() ,可以完成一些必要的初始功能,如果你需要的话。
#13
如果没人有异议,我就这样总结了:
1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能;
2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。
1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能;
2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。
#14
子类的构造函数都会先调用父类的默认构造函数。
#15
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
#16
运用super():
public class MessageDemo extends JFrame
{
....
public MessageDemo()
{
this.setTitle("Message !");
}
//比较
public MessageDemo()
{
super("Message !");
//这句代码等于new JFrame("Message !");
}
}
public class MessageDemo extends JFrame
{
....
public MessageDemo()
{
this.setTitle("Message !");
}
//比较
public MessageDemo()
{
super("Message !");
//这句代码等于new JFrame("Message !");
}
}
#17
总之,super关键字可以去调用父类的方法。
#18
我来说
首先确定一件事情: 子类一定会调用父类的构造方法。
然后再说子类如何调用父类的构造方法。
1. 如果子类的构造方法里没有显示的调用父类的构造方法。则子类的构造方法会自动调用父类的默认构造。
2. 如果子类的构造方法里明确的调用了父类的构造方法。则就按照这个调用。不再调用默认的构造了。
基于这个事实。 楼主的问题就很好回答。他的代码,子类的构造方法里调用了父类的构造方法: super(); 但是他是显式的调用了父类的默认构造方法。所以这种情况下写super();和不写super();是一样的。
但是假如父类里面还有别的构造方法比如 super(String a); 那在子类里写
super("myName");
和不写效果就不一样了。不写的话就调用super();了
首先确定一件事情: 子类一定会调用父类的构造方法。
然后再说子类如何调用父类的构造方法。
1. 如果子类的构造方法里没有显示的调用父类的构造方法。则子类的构造方法会自动调用父类的默认构造。
2. 如果子类的构造方法里明确的调用了父类的构造方法。则就按照这个调用。不再调用默认的构造了。
基于这个事实。 楼主的问题就很好回答。他的代码,子类的构造方法里调用了父类的构造方法: super(); 但是他是显式的调用了父类的默认构造方法。所以这种情况下写super();和不写super();是一样的。
但是假如父类里面还有别的构造方法比如 super(String a); 那在子类里写
super("myName");
和不写效果就不一样了。不写的话就调用super();了
#19
回复人: baopingle() ( ) 信誉:100 2003-11-06 13:59:00 得分:0
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
如果一个类的默认构造函数是private,那么此类将不能被继承
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
如果一个类的默认构造函数是private,那么此类将不能被继承
#20
你是在jbuilder 里吧
可以下结论,super()有时有用,有时没有用,但看情况
可以下结论,super()有时有用,有时没有用,但看情况
#21
#1
关注中。。
#2
构造器不会被继承
你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时
你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时
#3
to drinkant(喝酒的蚂蚁) :
“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。
“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”
--对,你也没说错,不过并没有回答我的问题。
既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。
“构造器不会被继承”--没错,我并没有说其可以继承。这个我知道。
“你所说的自动调用super是当用户没有明确写构造器而由编译器自动生成时”
--对,你也没说错,不过并没有回答我的问题。
既然调用super(),自然不设计其他带参数的构造函数。就算子类的构造函数有内容,super()从我所做的试验来看都是可有可无的。
#4
super()是不有可无,但其可以简化程序
#5
也同上,可以简化程序,当某个参数不同时,将该参数修改,然后用super()重写一次就ok了。
#6
简化程序?是用在别的地方吧,就
public RuntimeException() {
super();
}
有什么简化吗?
public RuntimeException() {
super();
}
有什么简化吗?
#7
super();用来调用父类的构造方法.
比如你继承了JTextField类,你必须在你的构造方法中掉用super();
比如你继承了JTextField类,你必须在你的构造方法中掉用super();
#8
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";
}
}
编译通过
不是必须的。试验代码如下:
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";
}
}
编译通过
#9
试验代码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()
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()
#10
当你的超类有很多子类的时候,
那根据设计模式的观点,
公共的代码就应该放在超类中。
这时候就能体现出super()的优势,
公共的部分,只需要在超类中实现一次。
那根据设计模式的观点,
公共的代码就应该放在超类中。
这时候就能体现出super()的优势,
公共的部分,只需要在超类中实现一次。
#11
如果子类没有定义构造函数,就自动用super()。
#12
调用 super() ,可以完成一些必要的初始功能,如果你需要的话。
#13
如果没人有异议,我就这样总结了:
1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能;
2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。
1.这个super()和其他子类调用父类的方法一样,如果下面还有代码,就是简化了代码,直接调用父类的功能;
2.如果像我上面写的那样,只有这一句调用,没有子类的其他增强代码,则仅仅是为了提醒‘有这个方法’,便于以后扩展。
#14
子类的构造函数都会先调用父类的默认构造函数。
#15
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
#16
运用super():
public class MessageDemo extends JFrame
{
....
public MessageDemo()
{
this.setTitle("Message !");
}
//比较
public MessageDemo()
{
super("Message !");
//这句代码等于new JFrame("Message !");
}
}
public class MessageDemo extends JFrame
{
....
public MessageDemo()
{
this.setTitle("Message !");
}
//比较
public MessageDemo()
{
super("Message !");
//这句代码等于new JFrame("Message !");
}
}
#17
总之,super关键字可以去调用父类的方法。
#18
我来说
首先确定一件事情: 子类一定会调用父类的构造方法。
然后再说子类如何调用父类的构造方法。
1. 如果子类的构造方法里没有显示的调用父类的构造方法。则子类的构造方法会自动调用父类的默认构造。
2. 如果子类的构造方法里明确的调用了父类的构造方法。则就按照这个调用。不再调用默认的构造了。
基于这个事实。 楼主的问题就很好回答。他的代码,子类的构造方法里调用了父类的构造方法: super(); 但是他是显式的调用了父类的默认构造方法。所以这种情况下写super();和不写super();是一样的。
但是假如父类里面还有别的构造方法比如 super(String a); 那在子类里写
super("myName");
和不写效果就不一样了。不写的话就调用super();了
首先确定一件事情: 子类一定会调用父类的构造方法。
然后再说子类如何调用父类的构造方法。
1. 如果子类的构造方法里没有显示的调用父类的构造方法。则子类的构造方法会自动调用父类的默认构造。
2. 如果子类的构造方法里明确的调用了父类的构造方法。则就按照这个调用。不再调用默认的构造了。
基于这个事实。 楼主的问题就很好回答。他的代码,子类的构造方法里调用了父类的构造方法: super(); 但是他是显式的调用了父类的默认构造方法。所以这种情况下写super();和不写super();是一样的。
但是假如父类里面还有别的构造方法比如 super(String a); 那在子类里写
super("myName");
和不写效果就不一样了。不写的话就调用super();了
#19
回复人: baopingle() ( ) 信誉:100 2003-11-06 13:59:00 得分:0
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
如果一个类的默认构造函数是private,那么此类将不能被继承
如果父类的构造函数是private,那就不可以被任何类所访问,只有public或是protected才可以被子类所访问。
如果一个类的默认构造函数是private,那么此类将不能被继承
#20
你是在jbuilder 里吧
可以下结论,super()有时有用,有时没有用,但看情况
可以下结论,super()有时有用,有时没有用,但看情况