zoukankan      html  css  js  c++  java
  • java9-9 匿名内部类

    1、
    匿名内部类
      就是内部类的简化写法。

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

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

        new Xxx()是创建了一个对象,而抽象类和接口不能被new修饰,
          所以,这里的东西的本质已经变了

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

     1 interface Inter4{
     2     public abstract void show();
     3     public abstract void show2();
     4 }
     5 
     6 class Outer4{
     7 
     8 public void method(){
     9 
    10     Inter4 i = new Inter4(){
    11     //这个匿名内部类是inter接口的匿名实现类 inter i =new Xxx();
    12     //这段就是Xxx();
    13 
    14     //重写接口中的方法
    15     public void show(){
    16         System.out.println("show");
    17 }
    18     public void show2(){
    19         System.out.println("show2");
    20     }
    21   };
    22         i.show();
    23         i.show2(); //调用show()方法
    24     }
    25   }
    26 class InnerClassDemo4 {
    27     public static void main(String[] args) {
    28       //调用上面的类
    29         Outer4 o = new Outer4();
    30 
    31         o.method();
    32     }
    33 }


    2、匿名内部类在开发中的使用

     1 interface Person {
     2 public abstract void study();
     3 }
     4 
     5 class PersonDemo {
     6 //接口名作为形式参数
     7 //其实这里需要的不是接口,而是该接口的实现类的对象
     8 public void method(Person p) {
     9 p.study();
    10 }
    11 }
    12 
    13 //实现类
    14 class Student implements Person {
    15 public void study() {
    16 System.out.println("好好学习,天天向上");
    17 }
    18 }
    19 
    20 class InnerClassTest2 {
    21 public static void main(String[] args) {
    22 //测试
    23 PersonDemo pd = new PersonDemo();
    24 Person p = new Student();
    25 pd.method(p);
    26 System.out.println("--------------------");
    27 
    28 //匿名内部类在开发中的使用
    29 //匿名内部类的本质是继承类或者实现了接口的子类匿名对象
    30 pd.method(new Person(){
    31 public void study() {
    32 System.out.println("好好学习,天天向上");
    33 }
    34 });
    35 }
    36 }

    3、
    匿名内部类面试题:
    按照要求,补齐代码
      

    1 interface Inter { void show(); }
    2 class Outer { //补齐代码 }
    3 class OuterDemo {
    4 public static void main(String[] args) {
    5 Outer.method().show();
    6 }
    7 }

    要求在控制台输出”HelloWorld”

    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    Linux ACL 权限之进阶篇
    Linux umask
    Linux 特殊权限 SUID,SGID,SBIT
    隔离 docker 容器中的用户
    理解 docker 容器中的 uid 和 gid
    Linux ugo 权限
    Dockerfile 中的 COPY 与 ADD 命令
    2013年全年总结
    参加2013中国大数据技术大会(BDTC2013)
    读书笔记2013第18本:《像外行一样思考,像专家一样实践》
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5863143.html
Copyright © 2011-2022 走看看