Java接口與實例化


看代碼看到

public Runnable r = new Runnable()
{
@Override
public void run()
{
   ...
}
}

接口不能new ,不過可以生成一個匿名類,省略了寫一個具體類實現接口的開銷。

public class Main {

    public static void main(String[] args)  {
        String a=new CustomerImpl().sayHello("hongda");
        System.out.println(a);
        String b=new Customer(){
            public String sayHello(String name){
                return "Hello2 "+name;
            }
        }.sayHello("hongdada");
        System.out.println(b);

    }
}

interface Customer {
    public String sayHello(String name);
}

class CustomerImpl implements Customer {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}
Hello, hongda
Hello2 hongdada

如果接口內有多個方法呢?

public class Main {

    public static void main(String[] args)  {
        String a=new CustomerImpl().sayHello("hongda");
        System.out.println(a);
        String b=new Customer(){
            public String sayHello(String name){
                return "Hello2 "+name;
            }
        }.sayHello("hongdada");
        System.out.println(b);

    }
}

interface Customer {
    public String sayHello(String name);
    public int Add(int a ,int b);
}

class CustomerImpl implements Customer {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
    @Override
    public int Add(int a ,int b){
        return a+b;
    }
}
Error:(8, 32) java: <匿名com.company.Main$1>不是抽象的, 並且未覆蓋com.company.Customer中的抽象方法Add(int,int)

匿名類內部實現接口全部方法:

public class Main {

    public static void main(String[] args)  {
        String a=new CustomerImpl().sayHello("hongda");
        System.out.println(a);
        String b=new Customer(){
            public String sayHello(String name){
                return "Hello2 "+name;
            }
            public int Add(int a ,int b){
                return a+b;
            }
        }.sayHello("hongdada");
        System.out.println(b);

    }
}

interface Customer {
    public String sayHello(String name);
    public int Add(int a ,int b);
}

class CustomerImpl implements Customer {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
    @Override
    public int Add(int a ,int b){
        return a+b;
    }
}
Hello, hongda
Hello2 hongdada

這種實現接口方式其實就是一個實現一個繼承接口的匿名類。

http://blog.sina.com.cn/s/blog_70441c8e0101sgnf.html


免責聲明!

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



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