25.匿名对象和内部类

一般在编写代码时可能会遇到这样的场景——在某些时候,我需要定义很多个类,创建很多个对象,这样会使程序运行变慢。而且某个类只会使用这一次,或者是某个类的对象只会使用一次,为它们专门取名会显的很麻烦。为了应对这种情况,Java中允许使用匿名对象和匿名内部类的方式来解决这个问题。匿名创建那些只会用到一次的类或对象,在使用一次后jvm的中的垃圾回收器会自动回收。

匿名对象【重点】

匿名对象就是没有对象名的对象。
匿名对象只能使用一次,使用完后会被jvm的垃圾回收器从内存中清理掉。
如果一个程序中创建了多个对象,程序的运行会很慢,这时,如果有的对象在程序运行过程中只会使用一次,就可以使用匿名对象
匿名对象通常被作为方法的参数进行传递。

案例:
用匿名对象实现下面案例。
定义一个Boy男生类,定义一个Girl女生类,它们都拥有:String name。
要求:给男生类一个行为 :追求女生的行为:pursue(Girl g) 在pursue()中,输出女生的姓名

package com.woniuxy.oop2;

public class Boy {
	private String name;
	public Boy() {
		
	}
	public Boy(String name) {
		this.name = name;
	}
	public void pursue(Girl g) {
		System.out.println(this.name+"追的女孩叫"+g.getName());
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
package com.woniuxy.oop2;

public class Girl {
	private String name;
	public Girl() {		
	}
	public Girl(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
package com.woniuxy.oop2;

public class BoyGirlTest {
	public static void main(String[] args) {
		// 使用构造方法来给创建的两个匿名对象赋值
		new Boy("小明").pursue(new Girl("小红"));
	}
}

内部类

内部类就是在一个类中,再编写另一个类

内部类的种类

  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

使用内部类编写的代码,可读性很差,能不用尽量不用。其他的内部类简单了解,匿名内部类用的最多,最重要。

匿名内部类(重点)

	没有名字的内部类,只能被使用一次
	我们可以使用匿名内部类类创建子类
最终会创建接口的子类对象

不建议使用匿名内部类,为什么?
因为一个类没有名字,没有办法重复使用。另外代码太乱,可读性太差。
学习匿名内部类主要是让大家以后在阅读别人的代码时,能够看懂,理解。但并不代表以后要这样写,因为匿名内部类有两个缺点:
1.太复杂,太乱,代码可读性差。
2.类没有名字,以后想重复利用,不能用。

package com.woniuxy.oop3;

public interface Animal {
	void eat();
}

package com.woniuxy.oop3;

public class Test {

	public static void main(String[] args) {
		/**
		 * 匿名内部类的创建语法
		 * new 父类/父接口{
		 * 		方法重写
		 * }
		 * 如果一个子类只需要使用一次,建议使用匿名内部类创建
		 */
		/**
		 * 解读:
		 * 	创建一个内部类会自动创建一个对象,
		 * 	此处的dog为创建的内部类的对象名
		 *  大括号内的内容才是匿名内部类,属于Animal接口的一个子类
		 */
		Animal dog = new Animal() {
			@Override
			public void eat() {
				System.out.println("狗喜欢吃骨头");	
			}				
		};
		//匿名内部类的对象调用eat方法
		dog.eat();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值