• 匿名内部类


    /*
    
    匿名内部类:没有类名的类就称作为匿名内部类。
    
    匿名内部类的好处:简化书写。
    
    匿名内部类的使用前提:必须存在继承或者实现关系才能使用。
    
    
    匿名内部类一般是用于实参。
    
    
    */
    
    abstract class Animal{
        
        public abstract Animal run();
    
        public abstract void sleep();
    }
    
    
    class Outer{
    
        public void print(){
            //需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。
            
            /*
            //局部内部类
            class Dog extends Animal{
                
                public void run(){
                    System.out.println("狗在跑..");
                }
    
                public void sleep(){
                    System.out.println("狗趴在睁开眼睛睡..");
                }
            }
            
            //创建对象
            Dog d = new Dog();
            d.run();    
            d.sleep();
            */    
            //匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。
            // 匿名内部类与Animal是继承 的关系。  目前是创建Animal子类的对象. 
        Animal    a = new Animal(){  //多态
            
                //匿名内部的成员 
                public Animal run(){
                    System.out.println("狗在跑..");
                    return this;
                }
                
                public void sleep(){
                    System.out.println("狗趴在睁开眼睛睡..");
                }
    
                //特有的方法
                public void bite(){
                    System.out.println("狗在咬人..");
                }
        
            };
        
            a.bite();
            a.run();
            a.sleep();
            
        }
    }
    
    
    
    class Demo6 
    {
        public static void main(String[] args) 
        {
            //System.out.println("Hello World!");
            
            Outer outer = new Outer();
            outer.print();
        
        }
    }
    //实现关系下匿名内部类
    interface Dao{
    
        public void add();
    }
    
    
    class Outer{
    
        public void print(){
            //创建一个匿名内部类的对象
            new Dao(){   //不是接口不能创建对象吗?怎么现在又可以了?
                 
                 public void add(){
                    System.out.println("添加成功");
                 }
            }.add();
        }
    }
    
    
    
    class Demo7 
    {
        public static void main(String[] args) 
        {
            test(new Dao(){
                
                public void add(){
                    System.out.println("添加员工成功");
                }
            });
    
    
        }
    
        //调用这个方法...
        public static void  test(Dao d){  //形参类型是一个接口引用..
            d.add();
        }
    }
  • 相关阅读:
    在c#中使用全局快捷键
    把其他C/C++编译器集成到VC2005中
    零基础学习Oracle 10G视频教程
    异常处理 Exception
    序列化与反序列化 BinaryFormatter二进制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)
    MVC 数据验证
    MVC 路由规则
    分部类,分部方法 修饰符partial
    HttpRuntime类
    MVC 模型绑定
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6294752.html
Copyright © 2020-2023  润新知