A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© class.雨 中级黑马   /  2015-11-6 22:21  /  497 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

lass Demo1_NoNameInnerClass {
        public static void main(String[] args) {
                Outer o = new Outer();
                o.method();
        }
}
/*
* A:匿名内部类
        * 就是内部类的简化写法。
* B:前提:存在一个类或者接口
        * 这里的类可以是具体类也可以是抽象类。
* C:格式:
*
                new 类名或者接口名(){
                        重写方法;
                }
* D:本质是什么呢?
        * 是一个继承了该类或者实现了该接口的子类匿名对象。
* E:案例演示
        * 按照要求来一个匿名内部类
*/

interface Inter {
        public void print();
}
abstract class  Animal {
        abstract void eat();
        abstract void sleep();
}

class Outer {
        class Inner implements Inter {
                public void print() {
                        System.out.println("print");
                }
        }
        //创建Animal的子类
        class Dog extends Animal {
                public void eat(){
                        System.out.println("狗吃骨头。。。");
                }
                public void sleep(){
                        System.out.println("狗睡觉。。。");
                }
        }

        public void method(){
                //Inner i = new Inner();
                //i.print();
                //new Inner().print();
                //Inter i = new Inner();                        //父类引用指向子类对象
                //想使用Inter 接口的实现类对象
                //new Inter();这样是不可以的,为啥?因为Inter是接口,里面有抽象方法
                new Inter(){//这里虽然是new 接口,但是和上面不一样,后面有一对{},"{}"里面是对于接口Inter中抽象方法的重写,只不过重写后没有单独起一个类名,直接用原来的接口名
                        public void print() {
                                System.out.println("print");
                        }
                }.print();//是匿名内部类对象
                //对于抽象类也是一样

               
                new Inter() {                                                //实现Inter接口
                        public void print() {                        //重写抽象方法
                                System.out.println("print");
                        }
                }.print();

                //Dog d = new Dog();
                //d.eat();
                /*new Animal(){
                        public void eat(){
                                System.out.println("狗吃骨头。。。");
                        }
                }//创建Animal类的子类对象,但是子类没有类名*/

                /*new Animal(){
                        public void eat(){
                                System.out.println("狗吃牛骨头。。。");
                        }
                }.eat();*/

                Animal a = new Animal(){//父类引用指向子类对象(匿名内部类的子类对象)
                        public void eat(){
                                System.out.println("狗吃牛骨头。。。");
                        }
                        public void sleep(){
                                System.out.println("狗睡觉。。。");
                        }
                        public void lookHome(){
                                System.out.println("狗看家。。。。。");
                        }
                };
                a.eat();
                a.sleep();
                //a.lookHome();//父类不能调用子类特有的方法




        }

1 个回复

倒序浏览
顶·······································
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马