三大内部类

一 成员内部类

package com.ys.bao15;
/*
 * 成员内部类:在类的成员位置,与类的成员变量,成员方法处于同一位置
 * 
 */
public class InnerDemo {
	public static void main(String[] args) {
		Outer.Inner i = new Outer().new Inner();
		i.function();
		
//		Outer o = new Outer();
//		o.method();
	}
}

class Outer{
	private int num = 10;
	public void method() {
		Inner i = new Inner();
		i.function();
	}
	class Inner{
		public void function() {
			System.out.println("方法");
			//在内部类中,可以直接访问外部类的的成员,即使是私有的!
			System.out.println(num);
		}
	}
}

成员内部类可用的修饰符

package com.ys.bao15;
/*
 * 成员内部类的修饰符:我们可以使用权限修饰符来修饰内部类,但是如果使用private的来修饰,则无法在其他类中访问
 * 				我们可以使用static修饰成员内部类,就不用再创建外部类的对象了
 * 
 * 		还可以使用abstract,final修饰,不过意义不大
 */
public class InnerDemo02 {
	public static void main(String[] args) {
//		Outer2.Inner2 i = new Outer2().new Inner2();
//		i.function();
		//如果使用static修饰内部类,在主函数里new对象时,就不用再先创建出外部类的对象
		//直接new内部类的对象就行了
		Outer2.Inner2 i = new Outer2. Inner2();
		i.function();
	}
}

class Outer2{
	public void method(){
		Inner2 i = new Inner2();
		i.function();
	}
	static class Inner2{
		public void function() {
			System.out.println("方法");
		}
	}
}

二 局部内部类

package com.ys.bao15;
/*
 * 局部内部类:它的位置在方法内,出了方法就不能使用了
 */
public class InnerDemo03 {
	public static void main(String[] args) {
		Outer3 o = new Outer3();
		o.method();
		
	}
}

class Outer3{
	public void method() {
		int num = 10;
		class Inner3{
			public void function() {
				System.out.println("方法");
			}
		}
		Inner3 i = new Inner3();
		i.function();
		
	}
	public void test() {
//		System.out.println(num);
//		Inner i = new Inner();
	}
}

三 匿名内部类

package com.ys.bao15;
/*
 * 匿名内部类:可以把匿名内部类看做是没有名字的局部内部类
 * 			它定义在方法中
 * 			必须在定义匿名内部类的时候创建它的对象
 * 格式:
 * 		new 类/接口(){
 * 			如果是创建了继承这个类的子类对象,	我们可以重写父类的方法
 * 			如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
 * 		};
 * 原理:	是创建了继承这个类的子类对象或者是实现了这个接口的子类对象
 */
public class InnerDemo04 {
	public static void main(String[] args) {
		Outer4 o = new Outer4();
		o.method();
	}
}

interface Inner{
	abstract public void function();
}

class Outer4{
	public void method() {
//		new Inner() {
//
//			@Override
//			public void function() {
//				System.out.println("方法");
//			}
//			
//		}.function();;//相当于有了对象,再  .方法   进行调用,不过这样的缺点就是只能调一次
		
		//向上转型,把这个对象赋给同类型的对象
		Inner i = new Inner() {

			@Override
			public void function() {
				System.out.println("方法");
			}
			
		};
		//这样的话就想调用几次调用几次了
		i.function();
		i.function();
		i.function();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值