JAVA_匿名内部类

package entity;

public class Tests {

    public static void main(String[] args) {
/*
 * 匿名内部类中 不能使用静态块
 * 匿名内部类必须继承一个类(抽象的,非抽象的都可以)或实现一个接口。如果
 * 父类(或者父接口)是抽象类,则匿名内必须实现其所有抽象方法。
 */
        Person p = new Person();
        
        /*
         * 两次匿名内部类构造的对象都不一样,因为new
         * */
        p.feed(new Animal(){
            public void eat(){
                System.out.println("吃早餐");
            }
        });
        
        p.feed(new Animal(){
            public void eat(){
                System.out.println("吃午餐");
            }
        });    
        
//==========================================================    
        /*
         * 1.如果想对象一样,强制类型转换
         * 2.在父类引用指向子类对象的情况下,子类 特有的方法 无法调用(匿名内部类才行,还要在末尾处 .子类独有的方法名)
         * */
        Animal dog =new Animal(){
            public void eat(){
                System.out.println("狗吃午骨头");
            }
        };    
        
        p.feed(dog);
        p.feed(dog);
        
        
//==========================================================    
        /*
         * 如果想调用子类 特有的方法,得使用匿名对象
         * */
        new Animal(){
            public void eat(){
                System.out.println("狗吃午骨头");
            }
            
            public void show()
            {
                System.out.println("子类 特有的方法");
            }
        }.show();    

        
        
    }
}

//接口
interface Animal{
    
    public abstract void eat();
    
}    

//抽象类也可以
//abstract class Animal{
//    
//    public abstract void eat();
//    
//}


// 父类引用指向子类对象(向上转型)
class Person{
    public void feed(Animal animal){
        animal.eat();
    }
}


 

阅读更多

没有更多推荐了,返回首页