黑马程序员技术交流社区

标题: =======我答错了问题(接口的构造函数),特此道歉======= [打印本页]

作者: 黄玉昆    时间: 2013-5-3 09:10
标题: =======我答错了问题(接口的构造函数),特此道歉=======
本帖最后由 黄玉昆 于 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. }
复制代码
从结果可以看出,父类中的构造函数时被调用了。说明抽象类中是可有有构造函数的。
构造函数的作用是初始化类的实例对象的,它能够把定义对象时的参数传给对象的域。所以是可以有构造函数的。

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




作者: 海不扬波    时间: 2013-5-3 09:20
支持楼主,谢谢分享。
作者: 曹睿翔    时间: 2013-5-3 09:59
难免有失误,学习中!!

作者: 曹德君    时间: 2013-5-3 10:03
我代表月亮原谅你了。
作者: 壹旪傾峸    时间: 2013-5-3 10:03
支持!!!学习就是这错误的积累!!
作者: 壹旪傾峸    时间: 2013-5-3 10:04
曹睿翔 发表于 2013-5-3 09:59
难免有失误,学习中!!

啊哦 貌似你在黑马论坛很出名啊
作者: 李德全    时间: 2013-5-3 10:29
确实是好人啊
作者: 黄茂霖    时间: 2013-5-3 11:07
不怕!~我也经常出错,错多了吸取经验
作者: 壹旪傾峸    时间: 2013-5-3 13:50
壹旪傾峸 发表于 2013-5-3 10:04
啊哦 貌似你在黑马论坛很出名啊

...............
作者: 丘凤光    时间: 2013-5-3 14:58
严谨治学,有错就改{:soso_e179:}
作者: 袁梦希    时间: 2013-5-3 15:52
{:soso_e146:}{:soso_e145:}
作者: 曾祥旭    时间: 2013-5-3 16:05
本帖最后由 曾祥旭 于 2013-5-3 16:37 编辑

有点疑问,我知道的是:静态代码块是给类进行初始化的;构造函数是给对应的对象进行初始化的;抽象类中的构造函数是给子类对象初始化的。楼主说:构造函数的作用是初始化类的?表示不理解,抽象类中的构造函数初始化类吗?
作者: 黄玉昆    时间: 2013-5-3 16:42
曾祥旭 发表于 2013-5-3 16:05
有点疑问,我知道的是:静态代码块是给类进行初始化的;构造函数是给对应的对象进行初始化的;抽象类中的构 ...

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

     接口中没有构造函数,因为接口中都是方法都是抽象的,变量都是被final修饰的不能更
     改的,而构造函数中是有方法主体的,这与抽象函数相违背。然后类可以实现多个接口,若
     多个接口都有自己的构造函数,则不好决定子类的构造函数第一行怎么写。

作者: 黄玉昆    时间: 2013-5-5 19:38
李阳阳 发表于 2013-5-5 13:41
抽象类中有构造函数,接口中没有构造函数,我当时是这样总结的:
     抽象类中有构造函数,抽象类可以是一 ...

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

你大爷的   97万了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2