黑马程序员技术交流社区

标题: 接口 类 [打印本页]

作者: 余宏    时间: 2012-5-19 22:33
标题: 接口 类
本帖最后由 余宏 于 2012-5-19 22:34 编辑

public interface A {
        
         class B{
               
                static long count = 0 ;
                final long  id = count ++ ;
               
                public String toString(){
                        return id+"" ;
                }
               
        }
}
上面这段代码中,接口中为什么可以定义类,怎么实例化接口中的类?

作者: 于陈    时间: 2012-5-19 22:46
  
接口里面定义类,这个经验证是完全可以的,根据编译生成的文件来看,就class B就相当于一个内部类。
至于怎么实例化,直接在接口里面 B b=new B();
就行了~

作者: 李保成    时间: 2012-5-19 23:09
我是这么看的,接口里的成员默认都是static,这时候 内部类可以先简单看成是接口A中的一个成员变量,所以它可以不用创建对象,而直接使用A.B来调用。经过验证也是可以的。
作者: xieshuhua    时间: 2012-5-20 00:20
接口中定义的类,为静态类,不需要实例化就可以直接使用。
另送上毕老师关于接口的总结和我自己编写的接口内部类的实现和实现接口类的使用。
1、当一个抽象类全部为抽象方法时可以将其转化为抽象类
2、接口不能被实例化
3、只有子类实现了接口中的所有抽象方法,该子类才可以实例化

接口内部一般为:全局常量+抽象方法              //这里没有说明你指的内部类,不过通过代码可以发现,接口内部类最少加了静态修饰符。
自动添加public final static /abstract 修饰符

继承和实现的一点小区别
类和类之间用继承,非抽象方法可以直接使用
类和接口是实现关系,方法全部是抽象方法,必须子类实现,故用了更确切的关键字implements
  1. public class luck {
  2.             public static void main(String[] args) {
  3.              Inter.inner inn=new Inter.inner();
  4.                     System.out.println(inn.x);
  5.                     InterImp imp=new InterImp();
  6.                     imp.method();
  7.                 }
  8.         }
  9.         interface Inter{
  10.                 int num=6;
  11.                 abstract void method();
  12.                 class inner{
  13.                         int x=1;
  14.                 }
  15.         }
  16.         class InterImp implements Inter{
  17.                 public void method(){
  18.                         System.out.println("x");
  19.                 }
  20.         }
复制代码





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