接口那点事

我记得面试的时候有个人问我接口是不是可以new来实例化。我没答上来,但是他告诉我说,我们创建对象都是要通过构造函数来进行new出来这个对象。
但是我想了下,我虽然没有构造函数,但是我可以直接new这个接口,然后实现里面全部的方法不是也可以创建这个对象吗。其实我个人认为,只是回答的角度不同罢了。怎么说应该都说的通。
接下来,我们看看接口的这些事
一、接口的方法声明必须是 public abstract, 即便不写默认也是

public interface TestA {
    /**
     * 接口的方法声明必须是 public abstract, 即便不写默认也是
     */
    public abstract void test1();

    void test2();
    }

二、接口中不能包括具体的方法实现

public interface TestA {
    /**
     * 接口里面不能包含方法具体实现
     * 提示:Delete method body
     */
//    void test3(){}
}

三、可以声明 public static final 修饰的变量

public interface TestA {
 public static final String a = "我是变量";
    int b = 1;
   }

四、接口中可以有静态方法

public interface TestA {
 static void staticMethod(){
        System.out.println("我是静态方法");
    }
 }

五、jdk1.8中增加了这个是默认方法

public interface TestA {
	 /**
     * 这个是默认方法
     *
     */
    default String get(String aa){
        System.out.println("我是参数aa  = " + aa);
       return a;
    }
}

测试


/**
 * 方法调用
 */
class TestD{
    public static void main(String[] args) {
        /**
         * 接口不能实例化,但是.....但是可以被实现类创建
         */
        TestA testA = new TestB();
        /**
         * jdk 1.8后增加的 默认方法
         */
        String hello_world = testA.get("Hello World");
        System.out.println("hello_world = " + hello_world);
        System.out.println("-----------华丽分割线----------");
        /**
         * 我就想问问这么咋就创建不出来对象了呢,虽然平时不这么干,但是能实现创建对象啊。咱们单说创建对象这个事哈。
         */
        TestA tA = new TestA() {
            @Override
            public void test1() {
                
            }

            @Override
            public void test2() {

            }
        };
    }
}

猜你喜欢

转载自blog.csdn.net/myhAini/article/details/112608723