鱼C论坛

 找回密码
 立即注册
查看: 2714|回复: 0

[学习笔记] Java暑期学习Day24

[复制链接]
发表于 2017-7-28 23:48:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天是第24天,2017.07.28


                               
登录/注册后可看大图



匿名内部类
  如果有临时继承某个类或操作接口并建立实例的需求,而这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类来解决这个需求。
                                
匿名内部类的特点:
   1.<没有名称,没办法引用>必须在创建时,作为new语句的一部分来声明并创建它们的实例。
   2.<必须继承一个类或者实现一个接口>如果父类(或父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。
   3.匿名内部类可以定义代码块,用于实例的初始化,但不能定义静态代码块

匿名内部类的语法为:
  new 父类|接口(){
  //类本体操作
};


  这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例
  1. public class AnonymousInnerClass {
  2.         public static void main(String[] args) {
  3.                 Person p = new Person();
  4.                 // Animal dog=new Dog();
  5.                 // p.feed(dog);
  6.                 new Animal() {
  7.                         private String name="abl";
  8.                 /*        static{
  9.                                 name="ss";
  10.                         }Cannot make a static reference to the non-static field name*/
  11.                         public void eat() {
  12.                                 System.out.println("啃骨头");
  13.                         }
  14.                         public void show() {
  15.                                 System.out.println(name);
  16.                                
  17.                         }

  18.                 }.show();

  19.                 //p.feed(dog);
  20.                 //p.feed(dog);
  21.                 p.feed(new Animal() {
  22.                         public void eat() {
  23.                                 System.out.println("吃鱼肉");
  24.                         }

  25.                 });

  26.         }

  27. }

  28. class Person {
  29.         public void feed(Animal animal) {
  30.                 animal.eat();
  31.         }
  32. }

  33. interface Animal{
  34.         public abstract void eat();
  35. }



  36. //abstract class Animal {
  37. //        public abstract void eat();
  38. //}

  39. /*
  40. * class Dog extends Animal{
  41. *  public void eat(){
  42. *  System.out.println("啃骨头"); }
  43. *   }
  44. */
复制代码

结果是——

abl
吃鱼肉



评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 14:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表