A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗衎 黑马帝   /  2011-7-29 01:47  /  1700 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么一些构造方法中要首现出现一下Super()?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 发帖的标题要自己写出问题来。

查看全部评分

3 个回复

倒序浏览
:) 这样说吧,就是为了提现程序的后期维护,
因为对于一个构造方法,子类是不能继承的,那么可以通过super来调用,
但是子类不仅有父类的属性还有子类特有的属性,如下面的例子可以看到,如果我以后需要修改父类的属性,那么子类的属性是通过super来调用的,这样就无须修改子类的属性,如果我们是吧父类的构造器在子类重新定义一边的话,那么对于一个或少数子类这样修改没问题,但是以后的项目当中万一有成千上万,那么这就是一个工程相当大的问题
对于下面这两个类[code=java]package cn.itcast.heima
class Base
{
        public double size;
        public String name;

        public Base(double size , String name)
        {
                this.size = size;
                this.name = name;
        }
}
public class Sub extends Base
{
        public String color;
        public Sub(double size , String name , String color)
        {
                //通过super调用来调用父类构造器的初始化过程
                super(size , name);
                this.color = color;
        }

        public static void main(String[] args)
        {
                Sub s = new Sub(5.6 , "测试对象" , "红色");
                //输出Sub对象的三个属性
                System.out.println(s.size + "--" + s.name + "--" + s.color);
        }
}[/code]
[ 本帖最后由 詹季春 于 2011-07-29  02:05 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2 我很赞同

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 02:16:13
藤椅

回复 楼主 的帖子

与普通方法相比,构造方法很特殊。构造方法不能被继承,无法被覆盖,不能直接调用,没有返回值。
自己写的一个简单的小例子看下运行结果[code]class MyA
{
        public MyA(){
                System.out.println("1");
                }
        public void print()
        {
                System.out.println("A");
                }
        }
class MyB  extends MyA
{
        public MyB(){
                super();
                System.out.println("2");
                }
    public void print()
    {
            System.out.println("B");
            }
        }
public class test1
{
        public static void main(String[] args)
        {
                MyB a = new MyB();
                a.print();
                }
        }        [/code]1
2
B

评分

参与人数 1技术分 +2 收起 理由
老罗 + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-29 09:26:05
板凳
class A {
     A(){
             System.out.println(’‘父类无参的构造方法'');
           }
   A(int age){
          System.out.println ('''ather is''+age+''有参的构造方法'');
   }
}
class B extends A{
  B(){
      super(30);
       System.out.println("B");
      }
}

就是说在你父类不止一个构造函数时,显示的调用super才有意义
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马