Java基础 匿名内部类

匿名内部类

是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,

  1. 定义子类
  2. 重写接口中的方法
  3. 创建子类对象
  4. 调用重写后的方法
    我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快
    捷方式。

说白了,就是为了偷懒实现接口。直接看例子理解:

定义接口:

interfance Product
{
    
    
  public double getPrice();
  public String  getName();
}

这里面Anonymous类里面的test方法,依赖于Product接口,但是接口显然是没有实现的。如果常规做我们还需要先去写个实现类来实现Product接口。但是,有了匿名内部类,就可以简便得操作了。
基本形式如下:

new 实现接口()
{
    
    
    //匿名内部类类体部分 --写具体的类实现
}

其中重点注意这一行

/*
1.等号右边:定义并创建该接口的子类对象
2.等号左边:是多态,接口类型引用指向子类对象
*/
Anonymous as= new Anonymous ();

这里又引入多态概念,多态简单来说就是同一个行为通过不同的对象表达出不同的特性。形式就是 父类 name = new 子类(),也是一种简化代码的写法,只需要调用父类的类名,再提供子类的重写,就可以表示出子类的特性。

以下是匿名内函数的示例:

public class Anonymous
{
    
    
  public void test (Product p)
  {
    
    
      System.out.println(p.getName()+"--------"+p.getPrice());
  }
  public static void main(String [ ] args )
    {
    
    
        Anonymous as= new Anonymous ();
          as.test(new Product( )//此处实现接口并实现抽象方法
            {
    
    
               public double getPrice( )//实现方法
                 {
    
    
                    return 8888;
                  }
                 public String getName( )//实现方法
                  {
    
    
                     return "I can do it ";
                  }

            });
    }
}

以下是多态示例:

//定义父类
public abstract class Animal {
    
    
public abstract void eat();
}

//定义子类
class Cat extends Animal {
    
    
public void eat() {
    
    
System.out.println("吃鱼");
}
}
class Dog extends Animal {
    
    
public void eat() {
    
    
System.out.println("吃骨头");
}
}

多态调用示例:

public class Test {
    
    
public static void main(String[] args) {
    
    
// 多态形式,创建对象
Animal a1 = new Cat();
// 调用的是 Cat 的 eat
a1.eat();
// 多态形式,创建对象
Animal a2 = new Dog();
// 调用的是 Dog 的 eat
a2.eat();
}
}

猜你喜欢

转载自blog.csdn.net/abyss_miracle/article/details/113946371