内部类和匿名类(课堂笔记)


前言

内部类:写在一个类里面的类
1. 普通的内部类
1)可以访问外部类的所有变量和方法
2) 内部里面不能有类变量和类方法
3) 内部类在外部不能直接访问

2. 静态内部类
3. 局部内部类
4. 匿名内部类


提示:以下是本篇文章正文内容,下面案例可供参考

一、普通内部类

内部类:写在一个类里面的类
1. 普通的内部类
1)可以访问外部类的所有变量和方法
2) 内部里面不能有类变量和类方法
3) 内部类在外部不能直接访问

package chapter08;

public class Example01 {
    
    
	int a;
	void a(){
    
    
	}
	
	class A{
    
    //内部类
		int b = a;
		void b(){
    
    
			a();
		}
	}
	
	public static void main(String[] args) {
    
    
		Example01 e = new Example01();
		A a = e.new A();
		a.b();
		
		class User{
    
    
			void say(){
    
    
				System.out.println("----------------");
			}
		}
		
		User user = new User();
		user.say();
	}
}


/*  [email protected]
 * 内部类:
 * 		写在一个类里面的类
 * 		1. 普通的内部类
 * 			1)可以访问外部类的所有变量和方法
 * 			2) 内部里面不能有类变量和类方法
 * 			3) 内部类在外部不能直接访问
 * 		2. 静态内部类
 * 		3. 局部内部类
 * 		4. 匿名内部类
 */

二、静态内部类

1.静态内部类里面不能访问外部类的非静态变量和方法

代码如下(示例):

package chapter08;

public class Example02 {
    
    
	
	public static class A{
    
    
		void a(){
    
    
			System.out.println("-------------");
		}
	}
	
	public static void main(String[] args) {
    
    
		A a = new Example02.A();
	}
}
/*
 * 静态内部类里面不能访问外部类的非静态变量和方法
 */

三、匿名内部类

1.除了使用父类的构造方法外还有类体,此类体被认为是一个子类去掉类声明后的类体,称作匿名类。匿名类就是一个子类
2.由于匿名类是一个子类,但没有类名,所有在用匿名类创建对象时,要直接使用父类的构造方法

package chapter08;

public class Example04 {
    
    
	public void click(OnClick onClick){
    
    
		onClick.doClick();
	}
	
	public static void main(String[] args) {
    
    
		Example04 e = new Example04();
		e.click(new OnClick() {
    
    
			
			@Override
			public void doClick() {
    
    
				System.out.println("不要点击我");
			}
		});
	}
}

interface OnClick{
    
    
	public void doClick();
}

package chapter08;

public class Example03 {
    
    
	public static void main(String[] args) {
    
    
		User user = new User(){
    
    
			@Override
			void say() {
    
    
				super.say();
				System.out.println("吃饭了吗");
			}
		};
		
		User u = new MyUser();
		user.say();
	}
}

class User{
    
    
	void say(){
    
    
		System.out.println("hello");
	}
}

class MyUser extends User{
    
    
	@Override
	void say() {
    
    
		super.say();
		System.out.println("吃饭了吗");
	}
}



猜你喜欢

转载自blog.csdn.net/qq_45879198/article/details/117528957
今日推荐