马太效应 发表于 2017-7-28 23:48:26

Java暑期学习Day24

今天是第24天,2017.07.28{:7_130:}

static/image/hrline/3.gif


① 匿名内部类
如果有临时继承某个类或操作接口并建立实例的需求,而这类子类或接口操作类只使用一次,不需要为这些类定义名称,这时可以使用匿名内部类来解决这个需求。
                              
②匿名内部类的特点:
   1.<没有名称,没办法引用>必须在创建时,作为new语句的一部分来声明并创建它们的实例。
   2.<必须继承一个类或者实现一个接口>如果父类(或父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。
   3.匿名内部类可以定义代码块,用于实例的初始化,但不能定义静态代码块。

③匿名内部类的语法为:
new 父类|接口(){
//类本体操作
};


这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例。
public class AnonymousInnerClass {
        public static void main(String[] args) {
                Person p = new Person();
                // Animal dog=new Dog();
                // p.feed(dog);
                new Animal() {
                        private String name="abl";
                /*        static{
                                name="ss";
                        }Cannot make a static reference to the non-static field name*/
                        public void eat() {
                                System.out.println("啃骨头");
                        }
                        public void show() {
                                System.out.println(name);
                               
                        }

                }.show();

                //p.feed(dog);
                //p.feed(dog);
                p.feed(new Animal() {
                        public void eat() {
                                System.out.println("吃鱼肉");
                        }

                });

        }

}

class Person {
        public void feed(Animal animal) {
                animal.eat();
        }
}

interface Animal{
        public abstract void eat();
}



//abstract class Animal {
//        public abstract void eat();
//}

/*
* class Dog extends Animal{
*public void eat(){
*System.out.println("啃骨头"); }
*   }
*/
结果是——

abl
吃鱼肉



页: [1]
查看完整版本: Java暑期学习Day24