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(); } }