接口不能被实例化

今天在看模板方法设计模式的时候 发现在接口回调的时候,匿名类里面new了一个接口 。觉得很奇怪就写了个小程序测试了一下

//HibernateCallback是一个接口
public void saveUser(final User user) {
        execute(new HibernateCallback() {
            public Object doInSession(Session session) {
                session.save(user);
                return null;
            }
        });
    }

下面是测试代码

public interface Interface{
    void print();
}

public class Test {

     static void updateUser() {
        execute(new Interface() {
            @Override
            public void print() {
                System.out.println("我是一个接口");
            }
        });
    }

      static void execute(Interface i){
        i.print();
    }

    public static void main(String[] args){
        updateUser();
    }
}
    
输出结果是:  我是一个接口

匿名类的反编译文件

从反编译文件上看并不是new了一个接口, 而是这匿名类实现了接口,然后把自己当成参数传递了过去  。

时间: 2024-10-07 04:06:15

接口不能被实例化的相关文章

接口对象的实例化在接口回调中的使用

首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化!作用见下文. 接口回调:可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该 接口变量就可以调用被类实现的接口中的方法.实际上,当接口变量调用被类实现的接口 中的方法时,就是通知相应的对象调用接口方法. 我们看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 3

JavaSE8基础 接口不能直接实例化

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: //接口 interface JavaerTrain{ //只要函数的声明,不要具体实现 public abstract void writeBook(); } abstract class Person { } class Javaer extends Person{ } class Demo { publ

PHP中的特殊类,接口类和抽象类(都不能直接实例化)

接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需要别的类去implements 它,而且必须一一实现接口定义的所有方法, 实际上接口类说白了,就是一个类的模板,一个类的规定, 举个例子interface Shop { public function buy($gid); public function sell($gid); public fun

Java 实例化接口或抽象类

1. 实例化接口: 某一天,我们想通过反射调用一个类的方法,但发现方法参数中有一个接口,我们都知道接口不能被实例化,这该怎么办呢? 举例: public class TestLib { public static final String TAG = "TestLib"; void myTest(MyInterface myInterface) { Log.i(TAG, "myTest start executing "); myInterface.doFail()

类继承接口、使用接口实例化 与 使用类实例化

一. 接口不能实例化,用接口的实现类可以实例化,将实现类的对象在内存中的地址指向接口,这个接口就可以使用了 二. 实现接口的类 实例 = new 实现接口的类()// 这样用不好吗? //这样已经不是好不好的问题了,这样的话,要接口有什么用? //用接口就是让实例和实现类的耦合度降低. //让程序更加容扩展. 以下是问题之外的知识,想看可以往下,不想看跳过. 接口 实例 = new 实现接口的类A() 接口 实例 = new 实现接口的类B() 接口 实例 = new 实现接口的类C() 这样的

JAVA学习第十四课(接口:implements)

接口: 我们知道抽象类中可以定义抽象方法,也可以定义非抽象方法,当一个抽象类中的方法都是抽象方法的时候,我们就可以定义另一种表现方式:接口(interface),所以接口是一种特殊的抽象类 接口的出现将"多继承"通过另一种形式表示出来,即"多实现". 注意:接口的定义不是class,而是interface,当然最后编译时还是class文件 interface Demo { abstract void show(); abstract void show1(); }

C#OOP之八 继承 接口和抽象类

继承 在现实生活中有所谓的"种瓜得瓜.种豆得豆"的说法,在生物学概念上就是"遗传"的概念,在面向对象中"继承"就类似于生物学中的遗传,通过继承,可以更好的实现代码的重用(复用,多次使用的意思).增加扩展性.简化代码等. 下面是现实生活中的引用: 定义与使用继承 继承一次最常用的就是通过合法程序(比如遗嘱)从别人那里接受财产或爵位等,有点类似于世袭制. 另外一个含义,是人从父母那里继承一些特征,如果孩子从父母继承的身高.相貌等特征.那么在什么情况下

【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析

一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口定义的一般形式为: [访问控制符]interface <接口名> { 类型标识符final 符号常量名n = 常数: 返回值类型  方法名([参数列表]); … } 二.接口的特点 1.Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显

Java中的类和接口

类有两种: 普通类  : 抽象类(abstract): 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承(extends),才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法. 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口. 抽象方法 如果你想设计这样