JAVA进阶版:内部类

文章目录

    • 1. 成员内部类
    • 2. 静态内部类
    • 3. 局部内部类
    • 4. 匿名内部类

1. 成员内部类

关于成员内部类

  • 1.成员内部类可以等同看作成员变量
  • 2.成员内部类不能有静态声明
  • 3.成员内部类可以访问外部所有数据
package javase.jingjie.内部类;
public class 成员 {
     
	//静态变量
	private static String s1="A";
	//成员变量
	private String s2="B";
	//静态方法
	private static void m1() {
     
		System.out.println("静态static's m1 is start");
	}
	//成员方法
	private void m2() {
     
		System.out.println("成员m2 is start");
	}
	//成员内部类
	//可以用访问控制权限符去修饰,缺省,private,protected,public
	class 成员内部类{
     
		int d=45;
		//静态方法
		//public static void m3() {}
		//成员方法
		public void m4() {
     
			//访问静态数据,成员.能省略
			System.out.println(成员.s1);
			m1();
			//访问成员数据
			System.out.println(s2); 
			m2();
			//可省略this,前面的知识
			System.out.println(this.d);
			this.m5();
		}
		public void m5() {
     
			System.out.println("hello");
		}
	}
	//入口
	public static void main(String[] args) {
     
		//创建外部对象
		成员 a=new 成员();
		成员内部类 t=a.new 成员内部类();
		t.m4();
	}
}

2. 静态内部类

关于静态内部类,不存在this

  • 1.静态内部类可以等同看作静态变量
  • 2.内部类可以访问外部类中的私有数据
  • 3.静态内部类可以直接访问外部类的静态数据,无法直接访问成员
package javase.jingjie.内部类;
public class 静态 {
     
	//静态变量
	private static String s1="A";
	//成员变量
	private String s2="B";
	//静态方法
	private static void m1() {
     
		System.out.println("静态static's m1 is start");
	}
	//成员方法
	private void m2() {
     
		System.out.println("成员m2 is start");
	}
	//静态内部类,不存在this引用
	//可以用访问控制权限符去修饰,缺省,private,protected,public
	 static class 静态内部类{
     
		//静态方法
		public static void m3() {
     
			System.out.println(s1);//静态变量可以访问,省略类名.
			//System.out.println(s2);//成员变量访问不了,引用.访问
			静态.m1();//可以省略外部类名.
			//m2();//成员方法不能访问,创建对象引用.访问
		}
		//成员方法
		public void m4() {
     
			System.out.println(静态.s1);
			m1();
			/*引用.访问
			 * System.out.println(s2); 
			 * m2();
			 */
		}
		public static void main(String[] args) {
     
			静态.静态内部类.m3();//静态方法调用,可以省略外部类静态.
			//成员方法调用
			静态内部类 t=new 静态内部类();//可以省略外部类.
			静态内部类 a=new 静态.静态内部类();
			a.m4();
		}
	}
	
}

3. 局部内部类

  • 1.局部内部类等同于局部变量
  • 2.局部内部类也不能有静态声明
package javase.jingjie.内部类;
public class 局部 {
     
	
	//方法
	public void m1() {
     
		//局部变量必须用final
		final int i=10;
		//局部内部类
		//局部内部类不能用访问控制权限符修饰
		class 局部内部类{
     
			//内部类不能用静态声明
			//public static void m2() {}
			
			//成员方法
			public void m3() {
     
				System.out.println(i);//10
			}
		}
		
		//调用m2
		局部内部类 n=new 局部内部类();
		n.m3();
	}
	//入口
	public static void main(String[] args) {
     
		局部 q=new 局部();
		q.m1();
	}
}

4. 匿名内部类

package javase.jingjie.内部类;
/**
 * 匿名内部类无法重复使用
 * */
public class 匿名 {
     
	//静态方法
	public static void t(CustomerService cs) {
     
		cs.logout();
	}
	//入口
	public static void main(String[] args) {
     
		//调用t方法
		t(new CustomerServiceImpl());
		
		//使用匿名内部类的方式执行t方法
		//整个“new CustomerService(){}”就是个匿名内部类
		t(new CustomerService() {
     
			public void logout() {
     
				System.out.println("系统已经安装好了");
			}
		});
	}
}
//接口,不能创建对象,所以调用不了,
interface CustomerService{
     
	//退出系统
	void logout();
}
//编写一个类去实现接口,这样父类继承接口,调用父类就访问接口了
class CustomerServiceImpl implements CustomerService{
     
	public void logout() {
     
		System.out.println("系统已经安全退出");
	}
}

你可能感兴趣的:(#,JAVA进阶)