JAVA基础(2)内部类

(1)、 内部类可以声明称public或private,对其访问的限制与成员变量和成员方法相同。
(2)、外部类声明的属性可以被内部类所访问,而外部类无法找到内部类中声明的属性。
(3)、用static声明的内部类会变成外部类,并且不能访问非static的外部类属性。
(4)、内部类也可以通过创建对象同外部类之外被调用,只要将内部类声明为public即可:
   public class InnerClassDemo3
   {
       public static void main(String[] args)
       {
           Outer outer = new Outer();
           Outer.Inner inner = outer.new Inner();
           inner.display() ;
       }
   }
(5)、在方法中定义内部类:
class Outer
 {
	 int score = 95;
	 void inst()
	 {
		class Inner
		{
			void display()
			{
			System.out.println("成绩: score = " + score);
			}
		}
	 	Inner in = new Inner();
	 	in.display();
	 }
 }

 public class InnerClassDemo4
 {
	public static void main(String[] args)
	{
	Outer outer = new Outer();
	outer.inst() ;
	}
 }
注意:在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期超出方法运行的生命周期:
void inst(final int s)
{
	final int temp = 20 ;
	class Inner
	{
		void display()
		{
			System.out.println("成绩: score = " + (score+s+temp));
		}
	}
	Inner in = new Inner();
	in.display();
}

(6)、匿名内部类:

先看一个简单的例子,

interface A
{
	public void fun1() ;
}
class B
{
	int i = 10 ;
	class C implements A
	{
		public void fun1()
		{
			System.out.println(i) ;
		}
	}
	public void get(A a)
	{
		a.fun1() ;
	}
	public void test()
	{
		this.get(new C()) ;
	}
}

class TestNonameInner1
{
	public static void main(String[] args)
	{
		B b = new B() ;
		b.test() ;
	}
}

上面这个还是一个普通的内部类实现,输出结果是10,这个时候换成内部类的写法如下,就能看出区别了:

interface A
{
	public void fun1() ;
}
class B
{
	int i = 10 ;
	public void get(A a)
	{
		a.fun1() ;
	}
	public void test()
	{
		this.get(new A()
			{
				public void fun1()
				{
					System.out.println(i) ;
				}
			}
		);
	}
}
class TestNonameInner2
{
	public static void main(String[] args)
	{
		B b = new B() ;
		b.test() ;
	}
}

由此程序可以发现,在程序中并没有明确的声明出实现接口A的类,但是可以发现,程序实现了接口A中的fun1()方法,并把整个的一个实现类,传递到了方法get中,这就是所谓的匿名内部类,它不用声明实质上的类,就可以使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值