黑马程序员——(五)内部类

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

1)非静态内部类

   定义内部类非常简单,只要把一个类反在另一个类内部定义即可。此处的“类内部”包括类中的任何位置,甚至在方法中也可以定义内部类(方法里定义的内部类被称为局部内部类)。大部分时候,内部类都被作为成员内部类定义,而不是作为局部内部类。成员内部类是一种与属性、方法、构造方法和初始化块相似的类成员;局部内部类和匿名内部类则不是类成员。

public class ClassDemo{
	//此处添加内部 
}


2)静态内部类

   如果使用static来修饰一个内部类,则这个内部类变成是外部类类相关的,属于整个外部类,而不是单独属于外部类的某个对象。因此使用static修饰的内部类被称为类内部类,也被称为静态内部类。静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,所以静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。

class ClassDemo {
	private int p1 = 5;
	private static int p2 = 9;
	// 创建静态内部类
	static class StaticClass {
		// 静态内部类里可以包含静态成员
		private static int age;
		// 在内部类创建方法
		public void point() {
			//内部类无法访问外部类的实例成员,故会出错
			System.out.println(p1);
			//下面则可成功输出
			System.out.println(p2);
		}
	}
}


3)局部内部类

   如果把一个内部类放在方法里定义,则这个类就是一个局部内部类,局部内部类仅在该方法里有效。因此局部内部类不能在外部类以外的地方使用,那么局部内部类也不能使用访问控制符和static修饰符修饰。如果需要用局部内部类定义变量,创建实例或派生子类,都只能在局部内部类所在方法内进行。

public class Test {

	public static void main(String[] args) {
		//定义局部内部类
		class JuBu{
			int a;
		}
		//定义局部类的子类
		class JuBuZi extends JuBu {
			int b;
		}
		//创建局部内部类的对象
		JuBuZi j=new JuBuZi();
		j.a=5;
		j.b=6;
		System.out.println("局部子类继承自局部类,子类对象a和b的属性是:"+j.a+","+j.b);
	}

}


4)匿名内部类

   匿名内部类适合创建那种只需要一次使用的类。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例。这个类定义立即消失,匿名内部类不能重复使用。

public class Test {

	public static void main(String[] args) {
		new 父类构造方法(实参列表)|实现接口(){
			//匿名内部类的类体部分
		}
	}

}

练习题:

      一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数。

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Wai w =new Wai();
		w.show();
	}
	
}
//定义一个外部类
	class Wai {
		private int x = 3;
		//定义一个内部类
		private class Nei {
			
			void fang() {
				System.out.println("x的值是:"+x);
			}
		}
		void show() {
			// 在外部类函数中创建内部类对象,调用内部类函数
			Nei n=new Nei();
			n.fang();
		}

	}



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值