20160308接口内部类:Scanner、工厂设计模式、匿名类

来源:互联网 发布:戴尔色彩软件 编辑:程序博客网 时间:2024/06/07 03:14
Scanner s=new Scanner(Readable r);
扫描r;
s.nextInt(); 则会读取扫描体r内的一个Int


Random r=new Random(seed);  //seed影响随机数顺序,可以为void
r.nextInt(10);  //生成一个10以内的Int


interface Readable{
   abstract read();   //设置输出给Scanner的内容
}


接口中的域默认为public+final+static,他们不是接口的一部分,而是放在该接口的静态存储区域内


嵌套接口
class A{
  interface B{}   
  private interface P{}  //class允许private接口,C中决不允许出现private关键字  
}
interface C{
  interface D{}
}


  class implements A.B{} //类可以如此调用接口
  class implements C{}  //只需实现C的方法,无需实现嵌套D的方法


工厂设计模式:建立一个新类来返回特定的类,类似getchar()。可以隐藏具体类。


10 内部类
想要创建内部类,必须先有外部类对象,借此产生内部类
1、Outer.Inner in=new Outer().new Inner();
2、Outer.Inner in=new Outer().getInner();


在内部类中生成外部类实例:return Outer.this;


interface A{}
class B implements A{}
A a=new B();


关于内部类的一些思考
1、内部类配合向上转型,可以实现。用户根本不知道所使用的这个对象为什么类型。
比如:
interface C{}
class A{
  private class B implements C{}
  public C getB(){return new B();}
}
当调用getB()时,用户只知道会得到一个通用接口A的对象,但是无法知道其内部是B。这有很大的隐蔽性和价值。
2、永远不要指望创建一个不在你范围内的对象,即B b=new ***,永远不要想!你所能使用的是,得到其外部类,
然后调用其外部类中public getB()方法,得到B。自制和获赠区别大家都懂。
3、当B中有public B(){},意味着你可以在其他的地方,构建一个B,但是你仍然无法获得B对象的引用。你只能讲B向上
转型,然后找一个A引用来指向B。




内部类可以访问所有外部private成员。外部类可以通过new Outer().new Inter().privateInnData的方式访问内部类的private成员。
因为在调用外部类时,实质是new Outer().privateOutData


一大问题:内部类、外部类、方法之间的权限调用问题!


作用域内的类B,可在作用域内直接常见对象B来调用其成员和方法。但仅在作用域内可以创建B对象。


匿名类:直接生成一个未定义的对象
1、存在接口A
2、new A(){定义}  //使用A接口,并向上转型
0 0
原创粉丝点击