Java匿名内部类的详细描述

内部类:在一个类中再次创建的类称为内部类,另一个类称为外部类;内部类分为有名内部类和匿名内部类

有名内部类:有自己名称的内部类,编译后生成 外部类$内部类.class文件

public class Student{//外部类
	class Grade{//有名内部类
		public void benefit() {
			System.out.println("成绩好得益于学习");
		}
	}
	{
		Grade grade = new Grade();//在代码块中相当于Grade grade = this.new Grade();
	}
	public static void main(String[] args) {
		Student student = new Student();
		Grade grade = student.new Grade();//在创建内部类对象时需要依靠外部类对象
		grade.benefit();
	}
}

匿名内部类:没有自己名字的内部类,需要依靠创建对象来定义,必须和创建对象同时存在。匿名内部类一定是创建对象的类的子类,或者一定是接口的实现类。编译后生成 外部类$数值.class文件(数值从1开始,几个匿名内部类就有几个数值)
格式:new 父类构造器([参数列表]) | 接口{
                 匿名内部类类体
          }

public class Body {
	public void beat() {
		System.out.println("心脏正在跳动");
	}
	static Body body = new Body(){//是Body类的子类
		@Override
		public void beat() {//重写了父类中的方法
			System.out.println("心脏正在跳动");
		}
	};
	public static void main(String[] args) {
		body.beat();//方法通过父类对象调用
	}
}

public interface Body {
	public void beat(); 
	
}




public class Test implements Body{
    static Body body = new Body(){//是Body接口的实现类
		@Override
		public void beat() {//重写了接口中的虚拟方法
			System.out.println("心脏正在跳动");
		}
	};
	public static void main(String[] args) {
		body.beat();//通过接口对象进行调用
	}
}

匿名内部类常用于重写父类和接口中的方法,当然也可以定义新的属性与方法,但是此方法上的上转型对象无法调用

关于修饰符问题

public class Test {//外部类与接口修饰符只能是public或默认
	public class Child{//内部类与接口修饰符4种均可
		
	}
	private class Parent{
		
	}
	public static void main(String[] args) {
		class Brother{//与局部变量一样,局部内部类不允许添加任何修饰符
			
		}
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值