Java类的第五个成员:内部类

内部类

1.相当于说,我们可以在类的内部再定义类。外面的类:外部类;里面的类:内部类。

2.内部类的分类:成员内部类(声明在类的内部且方法之外) VS 局部内部类(声明在类的方法里)

3.成员内部类:

  3.1.是外部类的一个成员:①可以有4种修饰符;②可以和类中的属性一样用static和final修饰。

  3.2.具体类的特点:①可以和类一样用abstract修饰;②还可以在其内部定义属性、方法、构造器。

4.局部内部类

5.关于内部类需要掌握的三个点:

  5.1.如何创建成员内部类的对象(静态成员内部类的对象 VS 非静态成员内部类的对象)

  5.2.如何区分调用外部类、内部类的对象(尤其是变量重名时)

  5.3.局部内部类的使用

成员内部类实例代码:

/**
 * 成员内部类
 */
public class TestInnerClass {
	public static void main(String[] args) {
		//创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器
		Man.Foot f = new Man.Foot();
		//由于Foot类中的name属性为static修饰,所以可以直接调用
		System.out.println(Man.Foot.name);
		System.out.println(f.id);
		
		//创建非静态内部类的对象:必须先创建外部类的对象,
		//通过外部类的对象调用内部类的构造器
		//方法一:
		Man man = new Man();
		Man.Head h1 = man.new Head();
		//方法二:
		Man.Head h2 = new Man("BIG" , 20).new Head("LITTLE" , 5);
		h2.info("MID");
	}
}

class Man {
	String name;
	int age;
	//非静态成员内部类
	class Head {
		String name;
		int id;
		
		public Head() {
			super();
		}
		
		public Head(String name, int id) {
			super();
			this.name = name;
			this.id = id;
		}
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public void info(String name) {
			System.out.println("name="+ name );
			System.out.println("this.name=" + this.name);
			System.out.println("Man.this.name=" + Man.this.name);
		}
	}
	//静态成员内部类
	//Foot是类名,不是对象名,所以Man.Foot是一个未实例化的静态类
	static/*这个static是表明这个类相对外部类Man是静态的,可以用Man.Foot*/class Foot {
		static/*这个static是表明这个属性相对类Foot是静态的,可以用Foot.name*/ String name;
		int id;
		
		public Foot() {
			super();
		}
		
		public Foot(int id) {
			super();
			this.id = id;
		}
	}

	public Man() {
		super();
	}
	
	public Man(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
}

局部内部类实例代码:

/**
 * 局部内部类
 */
public class TestMethodInnerClass {
	public static void main(String[] args) {
		
	}
}

class OutClass {
	//局部内部类
	//如下的使用方式较少
	public void method1() {
		class InnerClass {
			
		}
	}
	
	//常常使用一个方法,使其返回值为某个类或接口的对象,
	//而这个类或接口在方法内创建
	//方法一:
	public Comparable getComparable() {
		//1.创建一个实现Comparable接口的类:局部内部类
		class MyComparable implements Comparable {
			@Override
			public int compareTo(java.lang.Object o) {
				return 0;
			}
		}
		//返回一个实现类对象
		return new MyComparable();
	}
	
	//方法二:
	//返回一个实现Comparable接口的匿名内部类的对象
	public Comparable getComparable1() {
		return new Comparable() {//实现Comparable接口的匿名类
			@Override
			public int compareTo(java.lang.Object o) {
				return 0;
			}
		};
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值