zoukankan      html  css  js  c++  java
  • JAVA_SE基础——52.匿名内部类

    电信的电箱烧了,害我断了2天网,真拿命,耽误了发火


    Java匿名内部类的总结:

    没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。


    实例1:不使用匿名内部类来实现抽象方法

    package day10;
    
    abstract class Fu {
        public abstract void run();
    }
     
    class Zi extends Fu {
        public void run() {
            System.out.println("run....");
        }
    }
     
    public class AnonymousClass01 {
        public static void main(String[] args) {
            Zi p = new Zi();
            p.run();
        }
    }
    运行结果:
    run....

    可以看到,我们用Zi类继承了Fu类,然后实现了Zi的一个实例,如果此处的Zi类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?
    这个时候就引入了匿名内部类




    实例2:匿名内部类的基本实现
    package day10;
    
    abstract class Fu {
        public abstract void run();
    }
     
    public class AnonymousClass01 {
        public static void main(String[] args) {
          new Fu(){
        	  public void run(){
        		  System.out.println("run....");
        	  }
          }.run();
        }
    }
    运行结果:
    run....

    可以看到我们直接将抽象类Fu中的方法在大括号中实现了
    这样可以省略一个类的书写
    并且,匿名内部类还可以应用在接口上


    实例3:在接口上使用匿名内部类
    package day10;
    
    interface Fu {
        public abstract void run();
    }
     
    public class AnonymousClass01 {
        public static void main(String[] args) {
          new Fu(){
        	  public void run(){
        		  System.out.println("run....");
        	  }
          }.run();
        }
    }
    运行结果:
    run....

    由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现


    实例4:调用匿名内部类中的2个方法(2种方法)
    方法一:
    <span style="font-size:18px;">package day10;
    
    interface Fu {
        public abstract void run();
        public abstract void sleep();
    }
     
    public class AnonymousClass01 {
        public static void main(String[] args) {
         Fu x = new Fu(){
        	  public void run(){
        		  System.out.println("run....");
        	  }
        	  public void sleep(){
        		  System.out.println("sleep....");
        	  }
    		
          };
          x.run();
          x.sleep();
        }
    }</span>
    运行结果:
    run....
    sleep....

    引用指向对象 分别调用run()和sleep()方法!


    方法二:
    package day10;
    
    interface Fu {
        public abstract Fu run();
        public abstract void sleep();
    }
     
    public class AnonymousClass01 {
        
    
    	public static void main(String[] args) {
         new Fu(){
        	  public Fu run(){
        		  System.out.println("run....");	  
        		  return this;
        	  }
        	  public void sleep(){
        		  System.out.println("sleep....");
        	  }
    		
          }.run().sleep();
          
        }
    }
    运行结果:
    run....
    sleep....

    run()方法执行完毕后 返回Fu类对象   让匿名对象最后面的.run() 变成对象 然后再.sleep()      就是Fu.sleep()的意思。
    上面的两种方法 在继承状态下同样可以使用


  • 相关阅读:
    Linux Screen
    python SQLAlchemy 学习
    python Django 分页功能
    大数据 HBase Shell
    HBase 表操作
    Nginx 编译安装
    python Django 发送邮件
    python Django 用户管理和权限认证
    python shutil 文件操作
    python zip 压缩文件
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465289.html
Copyright © 2011-2022 走看看