Java内部类

内部类:

内部类在类中定义的类称为内部类

分类:

                成员内部类:类中方法以外

                静态内部类:类中方法以外,其使用static修饰

                局部内部类:方法中

                匿名内部类:值或实参之中

使用内部类的原因:每个内部类都能独立的继承一个接口的实现,所以其外部的类是否继承实现接口对内部类都没有影响。

成员内部类

        定义位置:在类中方法以外

        语法:

                访问权限修饰符 class 类名{

                }

         成员内部类不能定义静态属性,静态方法,静态代码块

        创建对象的方式:

             内部类 对象名 = 外部类对象.new 内部类对象(实参列表)

                在内部类所在的外部类普通方法中创建该内部类对象,可以使用this生成内部类对象

                this.new 内部类类名(实参列表);

                此时this可以忽略不写

                

package test12;

public class Doum1 {


	public void aS() {
		
	}
	
	public class A{
		
	}
	
	A a1=this.new A();//使用this
	A a2=new A();
	
	
	
}
package test12;

import test12.Doum1.A;

public class Test1 {
	public static void main(String[] args) {

		Doum1 aDoume=new Doum1();
		aDoume.aS();
		
		A aw=aDoume.new A();//语法  内部类 对象名 = 外部类对象.new 内部类对象(实参列表) 

	}

}

当外部属性与内部属性重名时可用this区分

外部类类名.this.属性名     外部类属性

this.属性名                        内部类属性

静态内部类

定义位置:内中方法以外

语法:访问权限修饰符 static class 类名{

           }

外部类可以定义的,该内部类都可以定义

内部类类名  对象名  =new  外部类类名.内部类名(实参列表);

静态内部类中不能使用外部类非静态成员

局部内部类

定义位置:方法中

语法:class 类名 {

                }

注意局部内部类不能定义静态属性,静态方法,静态代码块

创建对象:

        内部类类名  对象名 = new 内部类类名(实参列表);

注意;

                只能在定义该类内部类的方法中使用

                必须在定义该类下,方法结束前

import test12.Doum1.A;

public class Test1 {
	public static void main(String[] args) {

		Doum1 aDoume=new Doum1();
		aDoume.aS();
		
		A aw=aDoume.new A();//语法  内部类 对象名 = 外部类对象.new 内部类对象(实参列表) 

	}
	
	public void Test2() {
		
		class B{
			
		}
		
		B b1=new B();
		
	}
	
	B c1=new B();//可见局部内部类对象,必须创建在方法内

}

匿名内部类

定义位置:值或实参中

语法:父类名/接口名  对象名 = new 父接口名/父类名(){

                属性

                方法

                要重写的方法

}

特点:一个匿名内部类只能创建一个对象

优点:代码属性方便

缺点:导致代码混乱,使其阅读性较差

例:

package test2;

public class test {
	public static void main(String[] args) {
	
		nuBer  a1=new nuBer();
		a1.jia();//当想在main中直接调用未实现的方法jia时,必须使用
		//一个类实现接口的类,再创建对象来使用
	}
		
	}


interface Sum{
	public void jia();
}

class nuBer implements Sum{
	
	@Override
	public void jia() {
		
		System.out.println("使用加法");
		
	}

}

但当使用匿名内部类时

new Sum() {
			@Override
			public void jia() {
				
				System.out.println("使用匿名内部类");
				
			}
		
		
	}.jia();

可以看到大大简化了书写步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值