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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-4-18 00:33  /  992 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口有没有构造函数?

点评

毕老师视频里讲的很清楚.请楼主先认真看视频!!!  发表于 2014-4-18 10:38

13 个回复

倒序浏览
抽象类有,接口没有。
1. 构造器用于初始化成员变量,接口没有成员变量
2. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
3. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
linweiwen 发表于 2014-4-18 00:35
抽象类有,接口没有。
1. 构造器用于初始化成员变量,接口没有成员变量
2. 类可以实现多个接口,若多个接口 ...

接口中有成员变量吧?
回复 使用道具 举报
接口中的定义的变量不都是默认用final static来修饰的吗

这不就是成员变量吗?
回复 使用道具 举报
接口应该可以有构造方法,因为接口本质上还是一种特殊的类,只要是类就默认有无参构造方法。
但是接口不能通过A a=new A();进行实例化,因为接口是特殊的类,没有方法实现的类。
但是如果在实例化的时候先将接口中的抽象方法实现,接口也可以通过无参构造实例化的。有没有人帮我验证一下以下代码:
interface A{
    public void print();
}

public class Test{
    public static  void main(String[] args){
          A a=new A(){
              //将接口的抽象方法实现,接口就变成普通类了,可以new对象了。
              public void print(){
                  System.out.println("hello world");
             }
         };
         a.print();
    }
}


评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
左拉 发表于 2014-4-18 00:55
接口应该可以有构造方法,因为接口本质上还是一种特殊的类,只要是类就默认有无参构造方法。
但是接口不能 ...

你这个是匿名内部类,创建的是子类对象,因为多态,你这句代码相当于父类引用指向子类对象
回复 使用道具 举报
左拉 发表于 2014-4-18 00:55
接口应该可以有构造方法,因为接口本质上还是一种特殊的类,只要是类就默认有无参构造方法。
但是接口不能 ...

你的代码是有问题的,
接口不能实例化,只能被实现,
你用接口,代码里面连implements都没有,
还有说服力吗。

我觉得楼主也不要死抠了,
接口一般就定义常量(你要说那是它的成员我也没意见)和实现它的类所需要的方法,
印象中就没见过接口里面有构造函数的,
而且《Java编程思想》里面就说,接口自身没有提供任何具体实现了。
回复 使用道具 举报
接口没有构造方法,不能通过new+构造方法的方式来创建对象,得到自己实现类的对象
回复 使用道具 举报
追逐 高级黑马 2014-4-18 07:43:35
9#
本帖最后由 追逐 于 2014-4-18 07:44 编辑

接口中不可以有构造函数,因为接口是被实现的类,是没有办法被new 对象的。既然它没有办法被new对象,所以它也没有有构造函数的必要,因为构造函数是在对象被初始化的时候用来给来赋值的

class用于定义类
interface用于定义接口


接口定义是,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
记住:接口中的成员都是public的。




接口:是不可以创建对象的。因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。
否则子类是一个抽象类


接口可以被类多实现。也是对多继承不支持的转换形式。java支持多实现。


java中类、接口和抽象类之间的关系。
类与类是继承关系
类与接口是实现关系
接口与接口是继承关系


Java中在接口的应用中,要注意一下几点:
<1>接口一般定义的是常量和一些抽象方法。抽象类中可以包含抽象方法,也可以有非抽象方法,但是有抽象方法的类一定是抽象类。抽象方法不能有方法体。
<2>在引用接口时,接口的引用指向实现的对象,尽量定义为接口或父类的引用。这其中有可能用到多态的知识。引用接口用implements。
<3>接口(interface)只能定义抽象方法而且默认为是Public。常量是public static final 修饰的
<4>通过implements来引用接口。例:Class runnrtmp inplements runner.
<5>多个无关类可以实现一个接口,!!!!接口的引用指向实现的对象。
<6>一个类可以实现多个无关的接口(这点和继承要有所区别)
<7>和继承一样,接口与实现类之间存在多态性。
<8>接口可以继承其他的接口,并添加新的属性和抽象方法。
<9>在类中实现接口的方法时必须加上public修饰符

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
package com.itheima;
//接口实现 从键盘输入数字,求园的周长和面积
public interface inter_2 {
        final double pi=3.1415925;  //接口中的 数字 final 必须加上,不加 系统也会自动加下
        abstract double getArea(double r);//接口中的方法 必须加上abstract
        abstract double getcir(double r);
       
       
}


package com.itheima;

public interface inter_show {
        abstract void show(int r);

}


package com.itheima;
import java.util.Scanner;
public class inter_3 implements inter_2,inter_show{
               
                private int r;
                public inter_3(){
                       
                }
                public inter_3(int r){
                        this.r=r;
                       
                }
        public static void main(String args[])
        {       
                System.out.println("请输入你要求圆的半径");
               
                inter_3 a=new inter_3();
               
                Scanner sc=new Scanner(System.in);
               
                a.r=sc.nextInt();
               
                double b=a.getArea(a.r);
                double c=a.getcir(a.r);
                System.out.println("周长为"+c+"面积为"+b);
                a.show(a.r);
               
               
        }
               
        public  double getArea(double r){
               
                return pi*r*r;
               
               
        }
       
        public double getcir(double r){
               
                return 2*pi*r;
               
        }
         public void show(int r){
                 System.out.println("圆面积为"+(pi*r*r));
                 System.out.println("圆周长为"+(2*pi*r));
               
        }
       
}



回复 使用道具 举报
接口:初期理解,可以认为是一个特殊的抽象类
      当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示

class用于定义类
Interface用于定义接口

接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法
2,接口中的成员都有固定修饰符
        常量:public static final
        方法:public abstract

接口是不能创建对象的,因为有抽象方法。
需要被子类实现,子类对抽象接口中的方法全部覆盖后,子类才可以实例化
否则子类是一个抽象类

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

构造方法用来给成员变量赋初值,接口中只能定义常量,没有必要有构造方法

  1. nterface Inter
  2. {
  3.         //定义常量NUM
  4.         public static final int NUM=3;
  5.         //定义抽象方法
  6.         public abstract void show();
  7. }

  8. interface InterA
  9. {
  10.         public abstract void methord();
  11. }

  12. //定义类实现Inter接口
  13. class Test implements Inter
  14. {
  15.         //覆盖show方法
  16.         public  void show() {}
  17. }

  18. class InterfaceDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Test t = new Test();
  23.                 System.out.println(t.NUM);
  24.                 System.out.println(Test.NUM);
  25.                 System.out.println(Inter.NUM);
  26.         }
  27. }
复制代码
回复 使用道具 举报
接口:初期理解,可以认为是一个特殊的抽象类
      当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示

class用于定义类
Interface用于定义接口

接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法
2,接口中的成员都有固定修饰符
        常量:public static final
        方法:public abstract

接口是不能创建对象的,因为有抽象方法。
需要被子类实现,子类对抽象接口中的方法全部覆盖后,子类才可以实例化
否则子类是一个抽象类

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

构造函数是用来给成员变量赋初值,接口中只能定义常量和抽象方法

  1. interface Inter
  2. {
  3.         //定义常量NUM
  4.         public static final int NUM=3;
  5.         //定义抽象方法
  6.         public abstract void show();
  7. }

  8. interface InterA
  9. {
  10.         public abstract void methord();
  11. }

  12. //定义类实现Inter接口
  13. class Test implements Inter
  14. {
  15.         //覆盖show方法
  16.         public  void show() {}
  17. }

  18. class InterfaceDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Test t = new Test();
  23.                 System.out.println(t.NUM);
  24.                 System.out.println(Test.NUM);
  25.                 System.out.println(Inter.NUM);
  26.         }
  27. }
复制代码
回复 使用道具 举报
1 构造函数是用来在对象初始化前对对象进行一些预处理的,接口的话你只是声明而已,不一定要进行什么初始化,就算要进行初始化,也可以到实现接口的那一些类里面实现;
2 构造方法提供了实例化一个具体东西的入口,而接口只是用来表述动作,表述规范来的。
  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马