内部类——成员内部类、静态内部类、接口内部类、局部内部类、匿名内部类

//外部类
public class Outter {
	//1、成员内部类
	class A{}	
	//2、静态内部类
	static class B{}
	
	public void method(){
		//3、局部内部类
		class C{}
	}
}
public interface I1 {

	//4、接口内部类
	class D{}
}

1)成员内部类

  • 知识点:成员内部类

    • 特点:

      • 1.创建成员内部类对象之前,必须先创建外部类对象

      • 2.成员内部类可以调用外部类所有的属性

//创建成员内部类的对象
		Inner inner = new Outter().new Inner();//1.创建成员内部类对象之前,必须先创建外部类对象new Outter()
		
		inner.innerMethod();
		
//外部类
public class Outter {
	
	private 		String attr1 = "属性1";
					String attr2 = "属性2";//默认
	protected 		String attr3 = "属性3";
	public 			String attr4 = "属性4";
	final 			String attr5 = "属性5";
	static 			String attr6 = "属性6";
	static final 	String attr7 = "属性7";
	
	//成员内部类
	class Inner{
		
		String attr1 = "成员内部类属性";
		
		public void innerMethod(){
			System.out.println("成员内部类的方法");
			System.out.println(attr1);//就近原则,调用的是成员内部类的属性:attr1 = "成员内部类属性"
			System.out.println(Outter.this.attr1);//避开就近原则,调用的是外部类的属性:attr1 = "属性1"
			System.out.println(attr2);//Outter.this.attr2
            System.out.println(attr3);//Outter.this.attr3
			System.out.println(attr4);//Outter.this.attr4
			System.out.println(attr5);//Outter.this.attr5
			System.out.println(attr6);//Outter.attr6,静态属性用类名调用
			System.out.println(attr7);//Outter.attr7
		}
	}

2)静态内部类

  • 知识点:静态内部类

    • 特点:

      • 1.创建静态内部类对象之前,不用创建外部类对象

      •         //创建静态内部类的对象
        		Inner inner = new Outter.Inner();

      • 2.静态内部类只能调用外部类的静态属性

//外部类
public class Outter {
	
	static 			String attr1 = "属性1";
	static final 	String attr2 = "属性2";
	
	//静态内部类
	static class Inner{
		
		public void innerMethod(){
			System.out.println("静态内部类的方法");
			System.out.println(attr1);//Outter.attr1
			System.out.println(attr2);//Outter.attr2
		}
	}

3)接口内部类

  • 知识点:接口内部类

    • 特点:

      • 1.接口内部类类似于静态内部类 -- 创建对象的方式是一样的

      •         //创建接口内部类的对象
        		Inner inner = new Outter.Inner();

      • 2.接口内部类,系统默认使用public static修饰(接口内部类不能用private修饰了,而静态内部类可以用private修饰)

public interface Outter {
	
	//默认使用public static修饰
	class Inner{
		public void innerMethod(){
			System.out.println("接口内部类");
		}
	}

4)局部内部类

  • 知识点:局部内部类

    • 特点:

      • 1.方法以外不访问该类:局部内部类类似于方法里面局部变量,作用域在这个方法里面。所以局部内部类的特点是外界方法以外不能访问该类。所以外面不能创建对象

      • 2.局部内部类使用到外部类的局部变量时,JDK1.8开始该变量会自动变成常量,JDK1.8之前需要手动加上final

public class Outter {
	public void outterMethod(){		
		//局部内部类
		class Inner{
			public void innerMethod(){
				System.out.println("局部内部类");
			}
		}		
		//创建局部内部类对象
		Inner inner = new Inner();		
		inner.innerMethod();		
	}
public class Outter {
	public Object outterMethod(){		
		//num在Inner里使用到,该变量会自动变成常量,因为Java会考虑到该变量会在其他地方使用到,如果变量不变成常量,方法结束后会被回收
		int num = 100;	//num是局部变量,因为是外部类的outterMethod()方法里面的变量
		//局部内部类(在方法里面)
        class Inner{
			@Override
			public String toString() {
				return "局部内部类:" + num;
			}
		}		
		//创建局部内部类对象
		Inner inner = new Inner();
		return inner;
	}

5)匿名内部类

1、匿名内部类——类 步骤:

1.底层创建匿名子类,继承A类,重写method方法

2.创建匿名子类的对象

3.把匿名子类的对象地址 赋值给父类的引用(多态)

        A a = new A() {
			@Override
			public void method() {
				// TODO Auto-generated method stub
				
			}
		};	

 2、匿名内部类——接口 步骤:

1.底层创建匿名类,实现I1接口,重写method方法

2.创建匿名类的对象

3.把匿名类的对象地址赋 值给接口的引用(多态)

        I1 i1 = new I1() {
			@Override
			public void method() {
				// TODO Auto-generated method stub
				
			}
		};

 

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值