-3


1.内部类分为:实例内部类,静态内部类,局部内部类,匿名内部类
外部类仅能被public或者默认权限修饰
2.实例内部类:

  • 此内部类不可被static修饰,因为static属于类,而实例内部类属于对象
  • 实例内部类是可以访问外部类的成员,外部类的成员无法访问此内部类的成员
  • 在main方法中调用实例内部类时必须先创建外部类对象,在创建内部类对象
    3.静态内部类:
  • 静态内部类因为由static修饰,属于类,所以可以不用创建外部类对象,直接外部类.内部类调用
  • 静态内部类可以拥有静态和非静态成员
  • 静态内部类可以访问外部类的成员,如何访问?
class test{
	static String N = "1";
	int a;
	static class cat{
		static String N = "2";
		void name() {
//变量拥有就近访问原则
			System.out.println(N);
			System.out.println(this.N);//访问此类中的变量N
			//对外部类静态成员的访问
			System.out.println(test.N);
			System.out.println(new test().N);
			//对外部类非静态成员的访问
			System.out.println(new test().a);
		}
	}
}

public class insideclass {

	public static void main(String[] args) {
		test.cat c = new test.cat();
		c.name();
	}
}

4.局部内部类:定义在方法中的类叫局部内部类
局部内部类中的成员变量默认是用final修饰的
5.匿名内部类:没有名字的局部内部类

  • 必须有父类或者接口,并且没有构造器
  • new 父类/接口
interface iusb{
	void swapdata();
}

class motherboard{
	void plugin(iusb i) {
		i.swapdata();
	}
	
}
class keyboard implements iusb{
	public void swapdata() {
		System.out.println("键盘打字");
	}
}

class mouse implements iusb{
	public void swapdata() {
		System.out.println("移动鼠标");
	}
}
public class iusbable3{
public static void main(String[] args) {
	motherboard a = new motherboard();
//用到了匿名内部类
	a.plugin(new iusb() {
		public void swapdata() {
			System.out.println("鼠标移动");
			System.out.println("键盘打字");
		}
	});
	
}
	
}

6.枚举
枚举就是一个特殊的类,多个常量对象的集合

案例最终
package _01;
enum Weekday{
	MONDAY,TUESDAY,WENDESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
class Student{
	private Weekday week;

	public Weekday getWeek() {
		return week;
	}

	public void setWeek(Weekday week) {
		this.week = week;
	}

	
}
public class ENUM {
	public static void main(String[] args) {
		Student s = new Student();
		s.setWeek(Weekday.MONDAY);
		Weekday res = s.getWeek();
		if(res == Weekday.SATURDAY || res == Weekday.SUNDAY) {
			System.out.println("放假");
		}else
			System.out.println("上学");

		
	}
}
原文地址:https://www.cnblogs.com/-zero/p/12253538.html