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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄玉昆 于 2013-5-3 17:39 编辑

这道题是关于接口有没有构造函数的问题,我当时回答的时候,说到了抽象类的构造函数的问题;今天在复习的时候,我发现自己错了。希望看到的那位同学,回复一下,我改正一下我的问题。
对于抽象类有没有构造函数,我今天测试了一下,也找了一下答案,我测试的结果是有构造函数,之前我误认为是没有,深感惭愧啊。
下面是测试:
  1. public class Comment1 {

  2.         public static void main(String[] args) {
  3.         
  4.                 //创建子类对象,测试
  5.                 Students s = new Students();
  6.                
  7.                 /*
  8.                  * 结果为:抽象类构造函数
  9.                  * 这句话打印的是父类的构造函数中的话
  10.                  *         
  11.                  */
  12.         }
  13. }

  14. abstract class Person{
  15.         public Person(){
  16.                 System.out.println("抽象类构造函数");
  17.         }
  18.         public abstract void test();
  19. }

  20. class Students extends Person{
  21.         public void test() {
  22.                 System.out.println("test");
  23.         }
  24. }
复制代码
从结果可以看出,父类中的构造函数时被调用了。说明抽象类中是可有有构造函数的。
构造函数的作用是初始化类的实例对象的,它能够把定义对象时的参数传给对象的域。所以是可以有构造函数的。

真心向这位童鞋道歉,误导你了,希望见谅。



17 个回复

倒序浏览
支持楼主,谢谢分享。
回复 使用道具 举报
难免有失误,学习中!!
回复 使用道具 举报
我代表月亮原谅你了。
回复 使用道具 举报
支持!!!学习就是这错误的积累!!
回复 使用道具 举报
曹睿翔 发表于 2013-5-3 09:59
难免有失误,学习中!!

啊哦 貌似你在黑马论坛很出名啊

点评

我有吗?叶倾城,这是你们版主那几个禽兽的地盘  发表于 2013-5-3 10:33
回复 使用道具 举报
确实是好人啊
回复 使用道具 举报
不怕!~我也经常出错,错多了吸取经验
回复 使用道具 举报
壹旪傾峸 发表于 2013-5-3 10:04
啊哦 貌似你在黑马论坛很出名啊

...............
回复 使用道具 举报
严谨治学,有错就改{:soso_e179:}
回复 使用道具 举报
{:soso_e146:}{:soso_e145:}
回复 使用道具 举报
本帖最后由 曾祥旭 于 2013-5-3 16:37 编辑

有点疑问,我知道的是:静态代码块是给类进行初始化的;构造函数是给对应的对象进行初始化的;抽象类中的构造函数是给子类对象初始化的。楼主说:构造函数的作用是初始化类的?表示不理解,抽象类中的构造函数初始化类吗?

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
曾祥旭 发表于 2013-5-3 16:05
有点疑问,我知道的是:静态代码块是给类进行初始化的;构造函数是给对应的对象进行初始化的;抽象类中的构 ...

你说的没错,构造函数是对对象的初始化,是我说法上的错误。你很细心,我的说法没有把静态方法和构造方法区分开来,谢谢你的提醒。
回复 使用道具 举报
{:soso_e113:}这个问题我原来知道 分享过一篇关于抽象类的构造函数的
回复 使用道具 举报
抽象类中有构造函数,接口中没有构造函数,我当时是这样总结的:
     抽象类中有构造函数,抽象类可以是一个父类,而子类继承父类的时候,子类构造函数的第
     一句一定是父类的构造函数(默认super()),如果抽象类中没有,那子类就不能实例化成功;

     接口中没有构造函数,因为接口中都是方法都是抽象的,变量都是被final修饰的不能更
     改的,而构造函数中是有方法主体的,这与抽象函数相违背。然后类可以实现多个接口,若
     多个接口都有自己的构造函数,则不好决定子类的构造函数第一行怎么写。
回复 使用道具 举报
李阳阳 发表于 2013-5-5 13:41
抽象类中有构造函数,接口中没有构造函数,我当时是这样总结的:
     抽象类中有构造函数,抽象类可以是一 ...

你这样总结也是可以的,但是我个人观点是:
你对抽象类的总结说法有点牵强的,假设说抽象类中没有构造函数的话,子类也能实例化成功的,因为本身,任何一个类都是Object的子类,默认是继承Object的,所以即使不继承抽象类,这个子类(不应该称之为子类了)也是继承了Object的,是可以初始化成功的。退一步说,即使不继承Object,自己也是可以初始化的,因为有this()这个对自身的初始化,当然了,每个类默认一定有一个super()对其中一个构造函数初始化的。
个人愚见,仅供参考
回复 使用道具 举报
曹睿翔 发表于 2013-5-3 09:59
难免有失误,学习中!!

你大爷的   97万了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马