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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余宏 中级黑马   /  2012-5-19 22:33  /  1356 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余宏 于 2012-5-19 22:34 编辑

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

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
  
接口里面定义类,这个经验证是完全可以的,根据编译生成的文件来看,就class B就相当于一个内部类。
至于怎么实例化,直接在接口里面 B b=new B();
就行了~

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我是这么看的,接口里的成员默认都是static,这时候 内部类可以先简单看成是接口A中的一个成员变量,所以它可以不用创建对象,而直接使用A.B来调用。经过验证也是可以的。
回复 使用道具 举报
接口中定义的类,为静态类,不需要实例化就可以直接使用。
另送上毕老师关于接口的总结和我自己编写的接口内部类的实现和实现接口类的使用。
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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马