内部类的详细解说

                          静态内部类

           成员式的:

                          成员内部类

内部类:

                          局部内部类

           局部式的:

                          匿名内部类

 

 

(1) 静态内部类和成员内部类:相当于外部类中成员变量,与这些变量的方法都是并列的。

(2) A类的存在必须是以B类存在为前提的。 

(3) 所有的访问权限修饰符都不能放在内部类的前面,它前面只能放abstract或者final。

(4) 如果内部类在外部类的方法中定义的(叫做局部内部类) ,则这个内部类只能访问这个方法中的final变量。其它的变量都无法访问的(这个不信你可以试)。即是final int length = 100;

 

静态内部类代码:
package test;
public class StaticInnerClassTest {
	public static void main(String[] args) {
		//第三方类中生成静态内部类对象		
		OuterA.InnerA in = new OuterA.InnerA("Mary",120);
		in.test();
	}
}

class OuterA{
	private static String name = "solo";
	int age;
	public void move(){
		System.out.println("moving...");
		//在外部类中生成静态内部类对象
		InnerA a = new InnerA("Byr",150);
	}
	static class InnerA{
		String name;
		int weight;
		public InnerA(String name,int weight){
			this.name = name;
			this.weight = weight;
		}
		public void test(){
			System.out.println("test()");
			System.out.println(name);
			//访问外部类中同名属性
			System.out.println(OuterA.name);
			System.out.println(weight);
		}
	}
}

 

   

成员内部类代码:
package test;

public class MemberInnerClassTest {
	public static void main(String[] args) {
		OuterB out = new OuterB();
		//在第三方类中如何生成成员内部类对象
		OuterB.InnerB in = out.new InnerB("Mary",120);
		in.test();
		//一个外部类对象,可以生成若干个内部类对象
		OuterB.InnerB in2 = out.new InnerB("Mandy",140);
		in2.test();
	}
}

class OuterB{
	String name = "solo";
	int age;
	public void move(){
		System.out.println("moving...");
	}
	public InnerB test(){
		return this.new InnerB("Lili",150);
		//return new InnerB("Lili",150);
	}
	class InnerB{
		//成员内部类中不能有静态成员
		int weight;
		String name;
		public InnerB(String name,int weight){
			this.name = name;
			this.weight = weight;
		}
		public void test(){
			System.out.println(name);
			System.out.println(weight);
			//访问外部类中的同名属性
			System.out.println(OuterB.this.name);
		}
	}
}

 

局部内部类代码:这里提出一个问题,这个问题也就是演变这个局部内部类LocalInnerClassTest的来源。
                问题是这样的:在外部类OuterC中如何访问内部类InnerC的test方法?
答案就是下面这个:是通过继承来实现的。
package test;

public class LocalInnerClassTest {
	public static void main(String[] args) {
		OuterC out = new OuterC();
//		InnerC in = new InnerC();
		Super o = out.move();
		o.test();
		
	}

}

class OuterC{
	String name;
	int age;
	public Super move(){
		int weight = 100;
		class InnerC extends Super{
			int height;			
			public void test(){
				System.out.println("InnerC...test");
			}
		}
		return new InnerC();
	}
	
}


class Super{
	public void test(){
		System.out.println("Super...test()");
	}
}
 

 

          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值