匿名内部类

匿名内部类

● 匿名内部类,就是没有名字的一种嵌套类。一种内部类的简化写法。它的本质是 带具体实现的父类或者父接口的匿名的子类对象

● 如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那我们没有必要单独为其创建一个类来实现,而造成资源空间的浪费。

● 匿名内部类的前提必须是类和接口

● 格式

new 类名/接口名(){
重写抽象方法
}

●匿名内部类性质

● 可以直接访问外部类的所有成员,包含私有的
● 不能添加访问修饰符,因为它的地位就是一个局部变量
● 作用域:仅仅在定义它的方法或代码块中
● 匿名内部类–访问–>外部类成员
● 外部其它类—不能访问—>匿名内部类(匿名内部类的地位是一个局部变量)
● 如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类地位成员,可以使用(外部类名.this.成员)去访问

匿名内部类的三种实现方法

  1. 不用特地写一个类或者方法去实现接口中的方法,在实例化时实现接口中的方法。

这样必须在创建实例对象时实现接口中方法。因为接口的实现方法默 认为抽象方法,实现类必须重写接口中所有的抽象方法

interface Cal{
     int add(int a,int b);
}
public class test1 {
    public static void main(String[] args) {
        Cal c1=new Cal() {
            @Override
            public int add(int a, int b) {
                return a+b;
            }
        };
       int c=c1.add(1,2);
        System.out.println(c);
    }
}

  1. 当接口作为参数放在方法体里的时候,用new接口()的方式来实例独享,匿名内部类必须实现这个方法。

在方法体内部定义实现接口方法的方法来传入接口实现接口中的方法。

interface Cal{
     int add(int a,int b);
}
public class test1 {
    public static void main(String[] args) {
       System.out.println(Caladd(new Cal() {
    	   public int add(int a,int b) {
    	   		return a+b;
    	   }
       }));
    }
    public static int Caladd(Cal a) {
    	return a.add(1, 2);
    }
}

直接另外创建一个类,在类中定义接口方法的方法,在主类中传入接口实现接口的方法。
该方法只用扩展思路,同样创建了一个额外的类用来实现匿名内部类,造成存储空间浪费,不提倡使用。

interface Cal{
     int add(int a,int b);
}
class Program{
	public int Caladd(Cal a) {
		return a.add(1, 2);
	}
}
public class test1 {
    public static void main(String[] args) {
    	Program p=new Program();
    	System.out.println(p.Caladd(new Cal() {
    		public int add(int a,int b) {
    			return a+b;
    		}
    	}));
   }
}
  1. 也可以用启动线程的方式实现匿名内部类。
interface Cal{
     int add(int a,int b);
}
public class test1 {
    public static void main(String[] args) {
    System.out.println(
    new Cal() {
    	   public int add(int a,int b) {
    	      return a+b;
    	   }
    	 }.add(1, 2));
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AMBLE RUM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值