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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯大卫 中级黑马   /  2014-9-4 23:19  /  1074 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Demo extends Super
{
        public Demo(String s)
        {
               
                i= 2;
        }
        public static void main(String[] args)
        {
                Demo d = new Demo("yes");
                System.out.println(d.i);
        }
}
class Super
{
         int i= 0;
         public Super(String s)
         {
                 i= 1;
         }
}
为什么编译不能通过?

6 个回复

倒序浏览
首先  你的公众类呢?,
构造函数的引用地址呢?
回复 使用道具 举报
你在子类的前面加上public就可以了
回复 使用道具 举报
因为你的父类也需要实例化,但是在你的子类中没有提供父类实例化所需要的参数。
正确的方法是在子类的构造方法中加入一句话。super(s);
回复 使用道具 举报
Implicit super constructor Super() is undefined. Must explicitly invoke another constructor
不明确的超类构造函数Super()没有被定义。必须明确的调用其他构造函数。
你在Super中加入一个空的构造函数就可以了!
  1. public class Test {
  2.     public static void main(String[] args)
  3.     {
  4.             Demo d = new Demo("yes");
  5.             System.out.println(d.i);
  6.     }
  7. }
  8. class  Demo extends Super
  9. {
  10.         public Demo(String s)
  11.         {         
  12.                i= 2;
  13.         }
  14. }
  15. class Super
  16. {
  17.          int i= 0;
  18.          public Super(){}
  19.          public Super(String s)
  20.          {
  21.                  i= 1;
  22.          }
  23. }
复制代码

回复 使用道具 举报
简单地说,父类没有空参数的构造函数,而子类的构造函数里会默认调用父类的空参数的构造函数
回复 使用道具 举报
子父类 实例化的顺序,以及调用方式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马