java内部类

概念:a类定义在b类中,a类就是b类的内部类

内部类有,成员内部类、局部内部类、静态内部类、匿名内部类。

成员内部类---内部类作为外部类的成员

      public class OuterClass{
      String name="外部类---name"
      class InterClass{
            String name="内部类---name"
            void show(String name){
                  System.out.println("局部变量name"+name);//就近原则,局部变量name
                  System.out.println("内部类变量name"+this.name);
                  System.out.println("外部类变量name"+OuterClass.this.name);
            }
      }
}

内部类对象的创建

OuterClass.InterClass i1=new OuterClass().new InnerClass();

局部变量

内部类定义在外部类的代码块/方法体中

      public class OuterClass{
      String name="外部类---name"
      void show(){
            class InterClass{
            String name="内部类---name"
            void show(String name){
                  System.out.println("局部变量name"+name);//就近原则,局部变量name
                  System.out.println("内部类变量name"+this.name);
                  System.out.println("外部类变量name"+OuterClass.this.name);
            }
      }
      }
}

只能在当前方法中创建局部内部的对象,并且声明与普通类相同

静态内部类

class OuterClass{
	static String name="OuterClass--name";
	int a;
	static	class InnerClass{//局部内部类
		String name="InnerClass---name";
		void hai() {//在静态内部类的方法中不能调用外部类的实例成员
			System.out.println("局部变量name="+name);
			System.out.println("内部类name="+this.name);
			System.out.println("外部类name="+OuterClass.name);
			//System.out.println("外部类a="+a);//不能访问外部类的实例成员
		}
	}

对象的创建与成员内部类相同

匿名内部类

匿名内部类其实是局部内部类的简化写法

static void show2() {
		//想使用Haha的hai方法
		//匿名内部类来实现
		new Haha() {
			void hehe() {System.out.println("hehe1");}
		}.hai();
	}

匿名内部类是一次性类不能被调用

内部类的作用

  • 1、内部类可以很好的实现隐藏。
    非内部类是不可以使用 privateprotected修饰的,但是内部类却可以,从而达到隐藏的作用。同时也可以将一定逻辑关系的类组织在一起,增强可读性。
  • 2、间接的实现多继承。
    每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。所以说内部类间接的实现了多继承。
posted @ 2020-12-18 21:11  蓝色大鲸鱼  阅读(57)  评论(0编辑  收藏  举报