【Java】【匿名内部类】

/*
  匿名内部类
  就是内部类的简化写法。

  前提:存在一个类或者接口
  这里的类可以是具体类也可以是抽象类。

格式:
  new 类名或者接口名(){
  重写方法;
  }

  本质是什么呢?
   是一个继承了该类或者实现了该接口的子类匿名对象。
*/

//接口 Study
interface Study {
  public abstract void read();

  public abstract void write();
}

//抽象类 Play
abstract class Play {
  public abstract void kongfu();
}

//Hulk 实现 接口Study
class Hulk implements Study {
  public void read() {
    System.out.println("i can read");
  }

  public void write() {
    System.out.println("i can write");
  }

}

//Pander继承抽象类Play
class Pander extends Play{
  public void kongfu(){
    System.out.println("i love kongfu");
  }
}

public class AnonymousInnerClass {
  public static void main(String[] args) {

  // 方法一:不使用匿名内部类
  //如果只使用一次,创建继承类和实现类就太浪费内存了,所以匿名内部类适用只使用一次的情况。
  Study s = new Hulk();
  s.read();
  s.write();

  Play p = new Pander();
  p.kongfu();
  System.out.println("------------\n");

  //方法二:使用匿名内部类
  new Study(){
    public void read() {
      System.out.println("i can read");
    }

    public void write() {
      System.out.println("i can write");
    }
  }.read();

  new Study(){
    public void read() {
      System.out.println("i can read");
    }

    public void write() {
      System.out.println("i can write");
    }
  }.write();

  new Play(){
    public void kongfu(){
      System.out.println("i love kongfu");
    }
  }.kongfu();

  System.out.println("------------\n");

  //方法三:匿名内部类的另一种简化写法

  Study ss= new Study(){
    public void read() {
      System.out.println("i can read");
    }

    public void write() {
      System.out.println("i can write");
    }
  };

  ss.read();
  ss.write();

  Play pp =new Play(){
    public void kongfu(){
      System.out.println("i love kongfu");
    }
  };
  pp.kongfu();

 }

}

-------------------------------------------------------------------------------------------------------

时间: 2024-08-03 19:30:09

【Java】【匿名内部类】的相关文章

为什么说Java匿名内部类是残缺的闭包

前言 我们先来看一道很简单的小题: public class AnonymousDemo1 { public static void main(String args[]) { new AnonymousDemo1().play(); } private void play() { Dog dog = new Dog(); Runnable runnable = new Runnable() { public void run() { while(dog.getAge()<100) { // 过

java 匿名内部类 js 闭包

最近在看js,看到closure(闭包)这一块儿的时候就想到了 java的匿名内部类 两者都有涉及到变量/参数的引用问题. 先说java的匿名内部类,他的定义我就不多做说明了,可以参考地址 http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html .我们今天主要说: 1.Why cannot an anonymous class access local variables in its enclosing

#随笔之java匿名内部类

随笔之java匿名内部类 从今天起开始每日一篇技术博客,当然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,希望大家多多指教,一起进步! 在讲匿名内部类之前,先讲讲内部类的一些概念. 1.内部类:顾名思义,内部类就是写在一个类里面的类(废话),这里大家可能会问了,为什么我们不直接写一个class呢,非要写在内部.原因很简单,内部类一方面是有很好的封装性,要通过外部类对象才能访问(具体实例见下方代码).另一方便定义起来很方便.最后,内部类还可以骚气地实现多重继承,因为外部类是否继承或实

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Think in java读书笔记之:java匿名内部类的继承和覆盖

内部类的继承 Java中继承匿名内部类一个要结局的问题就是,内部类的构造器必须要指向其外围对象的引用,所以要采取特殊的语法.书上给的示例代码的可有编译版本,必须在继承的内部类的构造器内添加enclosingClassReference.super(). 1 class WithInner{ 2 class Inner{} 3 } 4 public class InheritInner extends WithInner.Inner{ 5 InheritInner(){ 6 enclosingCl

【50】java 匿名内部类剖析

匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明格式如下: new ParentName(){ ...// 内部类的定义 } 匿名内部类的使用场景: .只用到类的一个实例 . ·类在定义后马上用到. ·类非常小(SUN推荐是在4行代码以下) ·给类命名并不会导致你的代码更容易被理解. 匿名内部类的使用原则: ·匿名内部类不能有构造方法. ·匿名内

Java 匿名内部类 &amp; 内部类

一.JAVA中内部类和匿名内部类的区别 内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用. 匿名内部类:它只能使用一次,不区分static和非static.如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量.匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样.  总结:可以用匿名内部类的地方都可以用内部类替换,但是

为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { private int a; public class Inner { private int a; public void method(int a) { a++; //局部变量 this.a++; //Inner类成员变量 Outer.this.a++; //Outer类成员变量 } } } 一般做法是

从一次意外开始说java匿名内部类

java的内部类.匿名类本来以为自己用的已经很溜了, 结果, 就在昨天晚上12点来钟发生了重大事故.要说事故的严重性呢,那就是导致我一晚上没有睡着觉. 那下面先用一段模拟代码来描述下我出现的问题的: public class Test { public static void main(String[] args) throws InterruptedException { View v = new View(); v.show(1); Thread.sleep(500); v.mTextVie

JAVA匿名内部类(Anonymous Classes)

匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在完成了手头的开发任务后,查阅了一下JAVA官方文档,将匿名内部类的使用进行了一下总结,案例也摘自官方文档.感兴趣的可以查阅官方文档(https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html). 2.匿名内部类 匿名内部类