匿名内部类(掌握)

  1. 其实匿名内部类也就是局部内部类的简化形式
  2. 前提:存在一个类或接口
  3. 格式:
                new 抽象类名或者接口名(){
                               重写该方法;
    }
  4. 本质:因为我们知道,抽象类和接口是不能被直接实例化的,这里虽然写成了   new 抽象类名或者接口名,其实它的本质上还是抽象类的子类或者接口的实现类的一个对象,因为它重写了抽象的方法

     
  5. 匿名内部类在开发中的使用
         我们在开发的时候,会看到抽象类,或者接口作为参数。
         而在这个时候,我们知道实际需要的是一个子类对象
         如果该方法仅仅只调用一次,我们就可以使用匿名内部类的格式简化,这样程序消耗的内存更小
     
    interface Person {
    			public abstract void study();
    		}
    		
    class PersonDemo {
    			public void method(Person p) {
    				p.study();
    		    }
    		}
    		
    class PersonTest {
    			public static void main(String[] args) {
    				PersonDemo pd = new PersonDemo();
    				pd.method(new Person() {
    					public void study() {
    						System.out.println("好好学习,天天向上");
    					}
    				});
    			}
    		}

    匿名内部类的面试题(补齐代码)
     

    Interface Inter{
        void show();//实际上默认前缀会加上    public abstract
    }
    
    class Outer{
        //补齐代码
        public static Inter method(){
                return new Inter(){
                    public void show(){
                        System.out.println("HelloWorld");
                    }
                };
        }
    }
    
    
    
    
    class OuterDemo{
        Public static void main(String[] args){
            Outer.method().show();//这里要输出"Hello World"
        }
    
    }

    分析:主方法当中,Outer并没有进行实例化,而是直接调用方法,所以我们可以直接断定,这个方法肯定是一个静态方法,Outer.method().show(); 这是链式编程的写法,当调用method()之后,如果还要继续调用show()方法,那么method方法一定要给我们返回一个对象,我们才可以使用show()方法,补齐的代码中,new了一个Inter接口,本质上new的是一个接口的实现类的对象,因为接口是不能够直接被实例化的,这个实现类重写了Inter接口的方法,编译看左边,运行看右边.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值