對java中匿名對象和匿名類的簡單理解


一、匿名對象

 匿名對象:沒有名字的對象

匿名對象的特征:
      語法上: 只創建對象,但是不用變量來接收

      匿名對象的使用:
             1.匿名對象也是一個對象,具有對象的所有功能
             2.每一次使用匿名對象時,都是一個新的對象, 每次創建匿名對象都是不同的對象,一個匿名對象,只能使用一次,即匿名對象只能調用一次

 

      匿名對象只在堆內存中開辟空間,而不存在棧內存的引用

eg:

public class NiMingObject {

    public static void main(String[] args) {
        //1.非匿名對象(正常的對象)
        Dog d = new Dog();
        
        d.setAge(10);
        d.setName("來福");
        
        //d.eat();
        System.out.println(d.getAge()+"..."+d.getName());
        
        //2.匿名對象
        new Dog();
        
        //3.匿名對象的使用
        new Dog().setAge(18);
        new Dog().setName("旺財");
        
        System.out.println(new Dog().getAge()+"..."+new Dog().getName());
        //new Dog().eat();
    }

}

 

二、匿名類(匿名內部類)

如果要執行的任務需要一個對象,但卻不值得創建全新的對象(原因可能是所需的類過於簡單,或者是由於它只在一個方法內部使用),匿名類就顯得非常有用

如我們需要一個監聽類,並且在實例化這個監聽類的時候才需要實現這個監聽類內部的方法,那么使用匿名類就最方便了

 

    public static void test01(){
        //使用匿名內部類快速 創建 AbstractAnimal抽象類的子類對象
        //第一種方式
        new AbstractAnimal(){

            @Override
            public void eat() {
                System.out.println("吃");
            }

            @Override
            public void sleep() {
                System.out.println("睡");
            }
            
            
        };
        //第二種
        new AbstractAnimal(){
            public void eat() {
                System.out.println(".....");
            }
            @Override
            public void sleep() {
                System.out.println("!!!");
            }
        }.sleep();
        //第三種
        AbstractAnimal an1 =  new AbstractAnimal(){

            @Override
            public void eat() {
                System.out.println("吃吃吃");
            }

            @Override
            public void sleep() {
                System.out.println("睡睡睡");
            }
            
        };
        
        an1.eat();
        an1.sleep();
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM