智渔课堂官方免费教程十二:Java基础之内部类

内部类

在一个类的内部或方法的内部声明的类,叫做内部类。
语法格式:[访问修饰符]  [static]  class 类名{}
可以简单的把内部类理解成一个变量,只不过这个变量的数据类型是class,使用时需要创建对象后再使用。

分类:

        成员内部类:直接声明在类中的内部类(同成员变量)
局部内部类:生命在方法中的内部类(同局部变量)
静态内部类:使用static修饰的内部类(同静态变量)
        匿名内部类:没有名字的内部类
匿名内部类的语法格式:new 类名/抽象类名/接口名(){ // 重写方法 }

实例:
/**
 * 国家类:演示内部类的使用
 * @author 学霸联盟 - 赵灿
 */
class Country {
	// 声明一个公共的字符串类型的成员变量(属性)president(总统)
	public String president;

	// 声明一个公共的成员内部类City(城市)
	// 注意:这里不是方法,方法在名称后面要有小括号
	public class City {
		// 声明一个公共的String类型的province(市长)
		public String province = "张三";
		
		//非静态内部类中不能使用static声明成员
		public void method(){
			System.out.println("非静态内部类的非静态方法");
		}
	}

	/*
	 * 创建一个公共的没有返回值的方法promote(升职)
	 * 因为变量province属于City类,所以要使用变量province,
	 * 需要先创建City类的对象,然后用City类的对象才能调用province属性
	 */
	public void promote() {
		// 创建Family对象f
		City city = new City();
		// 将对象f的householder属性值赋值给president属性
		// 执行后president的值也是“张三”
		president = city.province;
		
		//声明一个局部内部类,只能在该方法的内部使用,外部无法使用
		class localInnerClass{ }
	}
	//静态内部类
	public static class Province{
		public static void staticMethod(){
			System.out.println("静态内部类的静态方法");
		}
		public void method(){
			System.out.println("静态内部类的非静态方法");
		}
	}
}
/**
 * 测试类:测试内部类的使用
 * @author 学霸联盟 - 赵灿
 */
public class InnerClassDemo{
	public static void main(String[] args) {
		//直接调用静态内部类的静态方法
		Country.Province.staticMethod();
		//创建静态内部类的对象
		Country.Province cp = new Country.Province();
		//只能使用对象调用非静态方法
		cp.method();
		//创建非静态内部类的对象时,必须先创建外部类的对象
		Country c = new Country();
		//使用外部类的对象去创建内部类的对象
		Country.City cc = c.new City();
		//调用非静态内部类的非静态方法
		cc.method();
	}
}
运行结果:
静态内部类的静态方法
静态内部类的非静态方法
非静态内部类的非静态方法








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章