java类实例-普通类、内部类、静态内部类、局部类、匿名类

java中含有许多类,不同的类有不同的用法,这里列举了一些实例。  普通类大家都容易理解,内部类主要起到代码隐藏机制,为了更好的组织代码结构。  内部类测出现给编程带来了很多困扰,在java编程思想中 ......

  java中含有许多类,不同的类有不同的用法,这里列举了一些实例。

  普通类大家都容易理解,内部类主要起到代码隐藏机制,为了更好的组织代码结构。

  内部类测出现给编程带来了很多困扰,在java编程思想中,对为什么出现内部类做了如下解释:

  每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承某个(接口)实现,对内部类都没有影响。

  内部类是的多重继承的解决方案变得完整,实现了“多重继承”。毕竟一个java类只能继承一个父类。

  public class ClassDemo {

  InnerClass innerClass = new InnerClass();

  public void selfIntroduce(){

  System.out.println('hello,我是:' this.getClass().getName());

  }

  public void useInnerClass(){

  innerClass.selfIntroduce();

  InnerClass innerClass = new InnerClass();

  innerClass.name='wowo';

  innerClass.selfIntroduce();;

  }

  /**

  * 方法中的局部类

  */

  public void useMethodClass(){

  class MethodClass implements HelloInnerClass{

  @Override

  public void selfIntroduction() {

  System.out.println('我在方法里也可以创建哦,我的名字是:' this.getClass().getName());

  }

  }

  MethodClass methodClass = new MethodClass();

  methodClass.selfIntroduction();

  }

  /**

  * 定义一个接口

  */

  interface HelloInnerClass{

  void selfIntroduction();

  };

  public static void main(String[] args) {

  SecondClass secondClass = new SecondClass();

  secondClass.selfIntroduce();

  //内部类不能new,会报错

  //InnerClass innerClass = new InnerClass();

  ClassDemo classDemo = new ClassDemo();

  classDemo.useInnerClass();

  //静态内部类,就可以在静态方法中直接new

  StaticInnerClass staticInnerClass = new StaticInnerClass();

  staticInnerClass.selfIntroduce();

  ClassDemo.StaticInnerClass staticInnerClass1 = new ClassDemo.StaticInnerClass();

  staticInnerClass1.selfIntroduce();

  StaticInnerClass.selfIntroduce('静态方法自我介绍。');

  //匿名内部类

  HelloInnerClass trump = new HelloInnerClass() {

  @Override

  public void selfIntroduction() {

  System.out.println('wowo,我是一个匿名内部类哦,我的名字叫川建国。');

  }

  };

  trump.selfIntroduction();

  //局部类

  classDemo.useMethodClass();

  }

  /**

  * 普通内部类

  */

  class InnerClass{

  public String name;

  public void selfIntroduce(){

  System.out.println('hello,InnerClass,我的名字是:' this.getClass().getName() ',name:' name);

  }

  }

  /**

  * 静态内部类

  */

  static class StaticInnerClass{

  public String name = 'StaticInnerClass';

  public void selfIntroduce(){

  System.out.println('hello,StaticInnerClass,我的名字是:' this.getClass().getName() ',name:' name);

  }

  public static void selfIntroduce(String wowo){

  System.out.println('hello,StaticInnerClass,我的名字是:' wowo);

  }

  }

  }

  /**

  * 同一个类文件中的其他类

  * 使用起来和public类没什么区别

  * 编译完之后是一个单独的class文件,与ClassDemo只差一个public

  */

  class SecondClass{

  public void selfIntroduce(){

  System.out.println('hello,我是' this.getClass().getName());

  }

  public static void main(String[] args) {

  ClassDemo classDemo = new ClassDemo();

  classDemo.selfIntroduce();

  }

  }