一、匿名对象概念
匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
二、匿名对象特点
1.创建匿名对象直接使用,没有变量名。
猫类:
public class Cat {
public void play(){
System.out.println("小猫咪爱玩耍");
}
}
测试类:
public class Test04 {
public static void main(String[] args) {
//调用匿名对象的方法时直接.就可以
new Cat().play();
}
}
2.在没有指定其引用变量时,只能使用一次。若还是按之前的调用,则是又创建了一个对象。
public class Test04 {
public static void main(String[] args) {
//调用匿名对象的方法时直接.就可以
new Cat().play();
//若再次调用则是不同的对象了
new Cat().play();
}
}
3.可以作为方法接受的参数、方法返回值使用。
public class Test04 {
public static void main(String[] args) {
//将匿名对象作为参数传递给method方法,返回类型为Cat,调用对象方法play();
method(new Cat()).play();
}
//猫玩耍的类,返回值为Cat类
private static Cat method(Cat c) {
return c;
}
}
三、内部类
内部类:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类,通俗的说就是在类里面创建类,也就是一个事物里面包含另一个事物,其他的类是外部类。
1.成员内部类
定义在外部类中的成员位置,可通过外部类对象进行访问。
class 外部类{
修饰符 class 内部类{
//代码
}
}
访问方式:外部类名.内部类名 变量名=new 外部类名().new 内部类名();
外部类:Body类;内部类:Heart类。
class Body {
class Heart{
public void jump(){
System.out.println("心跳");
}
}
}
测试类:
public class Test03 {
public static void main(String[] args) {
//实例化外部类对象
Body.Heart bh=new Body().new Heart();
//调用类中方法
bh.jump();
}
}
2.局部内部类
定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问
class 外部类{
修饰符 返回值类型 方法名(参数) {
class 内部类{
//代码
}
}
}
局部内部类:
class Party {
//外部类的eat方法
public void eat(){
//局部内部类Food
class Food{
//局部内部类中的make犯法
public void make(){
System.out.println("在聚会上制作食物");
}
}
//匿名对象类调用方法
new Food().make();
}
}
测试类:
public class Test03 {
public static void main(String[] args) {
//实例化局部内部类
Party p=new Party();
p.eat();
}
}
3.匿名内部类
特点:简化问题:定义实现类、重写方法、建立实现类对象、调用方法
接口:
public interface Play {
//定义接口的抽象方法
public abstract void play();
}
测试类:
public class Test05 {
public static void main(String[] args) {
//创建Play子类对象,即new
new Play(){
//重写子类方法
public void play(){
System.out.println("我喜欢出去玩");
}
//调用子类方法
}.play();
}
}
小结:
匿名对象使用比较多,主要是为了简化问题,简化代码。
成员内部类、局部内部类主要用于类中有类的情况。