精华内容
下载资源
问答
  • Java 接口实例化

    万次阅读 多人点赞 2019-08-09 10:14:46
    1、接口不能直接实例化对象 一开始学习接口就知道它与类的区别:接口不能用于实例化对象。但是可以在 Java 中,使用接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。 ...

    1、接口不能直接实例化对象

    一开始学习接口就知道它与类的区别:接口不能用于实例化对象。但是可以在 Java 中,使用接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

    public interface TestInterface{}
    TestInterface testInterface = new TestInterface();//这种肯定是不允许的 

    2、实现接口的子类可以通过创建对象赋值给接口

    接口不能实例化,用接口的实现类可以实例化,将实现类的对象在内存中的地址指向接口,这个接口就可以使用了。

    public interface Anim{}
    public class Cat implements Anim {}
    Anim  anim= new Cat();//这种是可以的,声明变量被绑定在一个以此接口实现的对象

    List Set Map都是接口,使用时先实现,List<String> list = new ArrayList<>();

    接口可以被声明出来,但决不能实例化,它可以作为子类的句柄指向子类的实例。

    3、子类创建对象赋值给接口后,接口再赋值给子类需要强制转换

    Anim  anim= new Cat();
    Cat  cat=(Cat)anim;

    4、接口在匿名内部类(假象的所谓内部类)实例化现象

    btn.setOnClickListetener(new OnClickListener(){ 
            @Override
            public void onClick(View v) {  }
        });
     

    这是匿名内部类的写法。new OnClickListener(){}其实并没有真正地实例化,new了一个实现接口的匿名内部类,然后new得到匿名内部类的对象再向上转型为它实现的接口(原始类型),等价于下面的写法:

     btn.setOnClickListener(new Listener());       
     
     class Listener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
                 
        }
    
    

    还有我们常用的Runnable:new了一个实现Runnable接口的匿名内部类,然后new得到匿名内部类的对象再向上转型为它实现的接口(原始类型

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

     

    展开全文
  • 接口--实例化接口对象的三种方式

    千次阅读 2019-12-26 17:45:12
    当我们创建了一个接口的时候,我们是无法像创建类对象一样,直接实例化接口对象的。所以在这里,我来分享三种方式来实例化接口对象。 //这里会提示'Student' is abstract; cannot be instantiated,也就是说接口是...

    当我们创建了一个接口的时候,我们是无法像创建类对象一样,直接实例化接口对象的。所以在这里,我来分享三种方式来实例化接口对象。

    	//这里会提示'Student' is abstract; cannot be instantiated,也就是说接口是抽象的,不能被实例化
    	Student stud00 = new Student();
    	
    	//1.使用实现类来创建接口对象
    		Student stu01 = new StuImpl();
    
    	//2.使用匿名内部类来创建接口对象
    		Student stu02 = new Student() {
                @Override
                public void introduce(String stuName, Integer age) {
                    System.out.println("我叫" + stuName + ",今年" + age + "岁");
                }
            };
    
    	//3.使用lambda表达式来创建接口对象
    		Student stu03 = (stuName, age) ->
                    System.out.println("My name is " + stuName + ",and I'm " + age + " years old");
    
    	//如果有两行及以上的Java语句,则不能省略大括号
    		Student stu04 = (stuName, age) -> {
            	System.out.println("第一行语句");
                System.out.println("第二行语句");
            };
    

    最后,需要注意的是,lambda表达式只支持函数式接口,也就是该接口里面只能有一个抽象方法,否则就会编译报错!可以在接口里加入@FunctionalInterface注解,来检查该接口是否只有一个抽象方法,若超过一个,该注解就会编译报错。

    	@FunctionalInterface
    	public interface Student {
        	void introduce(String stuName, Integer age);
    
        	void introduce(String stuName);
    	}
    
    展开全文
  • java利用反射为接口实例化对象并调用 package xxxxx; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import xxxxx.MyLibrary.MyCallback; import java.lang.reflect.InvocationHandler; ...

    java利用反射为接口实例化对象并调用

    package xxxxx;
    
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import xxxxx.MyLibrary.MyCallback;
    
    import java.lang.reflect.InvocationHandler;
    
    class MyLibrary {
        public interface MyCallback {
            void doMyCallback();
        }
        public void mainMethod(MyCallback myCallback) {
            System.out.println("doing MyLibrary mainMethod...");
            myCallback.doMyCallback();
        }
    }
    class MyHandler implements InvocationHandler{
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println("doing MyHandler invoke...");
            return null;
        }
    }
    public class Test3 {
        public static void main(String[] args) throws Exception {
        	Class<?> myLibraryClazz = Class.forName("xxxxx.MyLibrary");//类
            Class<?> myCallbackClazz = Class.forName("xxxxx.MyLibrary$MyCallback");//接口
            
            MyHandler myHandler = new MyHandler();//类
            MyCallback myCallback = (MyCallback)Proxy.newProxyInstance(
            		Test3.class.getClassLoader(),//类加载器
            		new Class[] { myCallbackClazz },//接口数组
            		myHandler//为接口实现的对应具体方法
            	);//为接口实例化对象
            Method method = myLibraryClazz.getDeclaredMethod("mainMethod", MyCallback.class);//(类名,参数类型)
            method.invoke(myLibraryClazz.newInstance(), myCallback);//调用方法,(实例化对象,内部接口实现对象)
        }
    }

     运行结果:

    doing MyLibrary mainMethod...
    doing MyHandler invoke...

    展开全文
  • java接口实例化

    万次阅读 2018-01-26 09:23:02
    1 接口无法进行实例化。不过接口可以通过匿名接口来操作。直接实现一个接口。但是是匿名的 如:public interface Test1Interface { public int aa=1; public void run(); } public class Test1 { ...
    1 接口无法进行实例化。不过接口可以通过匿名接口来操作。直接实现一个接口。但是是匿名的
    
    如:public interface Test1Interface {
    public int aa=1;
    public void run();
    }




    public class Test1 {


    private Test1Interface test1Interface=null;


    public Test1() {
    super();
    // TODO Auto-generated constructor stub
    }


    public Test1(Test1Interface test1Interface) {
    super();
    this.test1Interface = test1Interface;
    }

    public void start(){
    if(this.test1Interface!=null){
    this.test1Interface.run();
    }

    }
    }


    //测试  接口匿名类 直接实现一个接口。但是是匿名的
    Test1 test1=new Test1(new Test1Interface(){//匿名的实现接口


    public void run() {
    // TODO Auto-generated method stub
    System.out.println("11111");
    }

    });
    test1.start();


    2 接口的属性默认都是public、static、final类型的。
    如:/**
    * 接口变量 
    * 只能是public(公共的,private的类型,只能在接口中使用,但是接口都是方法申明而没有方法体) 
    * static类型的(是因为只能通过接口类名类使用。而无法接口自身实例化来调用),
    * final类型的(不能被修改)
    * 故只能是public、static、final类型的
    */


    public interface Test1Interface {
    public int aa=1;
    public void run();
    }


    3 接口无法实例化。不过实现接口的子类可以通过创建对象赋值给接口。
    如:public interface Commond {



    public void process();
    }


    public class RegisterImpl implements Commond{


    public void process() {
    // TODO Auto-generated method stub
    System.out.println("注册。。。。");
    }


    }


    //实现接口的类通过创建对象赋值给接口
    Commond commond=new RegisterImpl();
    commond.process();


    4 接口对象实例化后(通过实现接口的类创造对象赋值给接口)。如果想要赋值给实现接口的子类。需要通过强制转换。
    如:Commond commond=new RegisterImpl();
    commond.process();

    RegisterImpl registerImpl=(RegisterImpl)commond;
    registerImpl.process();




    5 通过子类的类名的全路径。可以得到class、继而得到类对象。然后调用接口方法。类名-》class->Object类对象
    如:String className="test.sample2.impl.RegisterImpl";
    Class<Commond> class_=(Class<Commond>) Class.forName(className);
    Commond commond_=class_.newInstance();//通过newInstance()得到对象。
    commond_.process();


    6 接口也可以作为参数进行传递来使用。
    如:public interface ICommond {


    public void sendCommond();
    }


    public class CommondImpl implements ICommond{


    public void sendCommond() {
    // TODO Auto-generated method stub
    System.out.println("发送命令....");
    }


    }




    public class TestCommond {


    private ICommond commond=null;

    public TestCommond() {
    super();
    // TODO Auto-generated constructor stub
    }


    public TestCommond(ICommond commond) {
    super();
    this.commond = commond;
    }

    public void sendCommond(){
    if(this.commond!=null){
    this.commond.sendCommond();
    }
    }



    }


    //首先是将实现接口的子类创造对象赋值给接口。然后将该接口作为参数传递。最后调用方法,该方法中调用该接口的方法
    ICommond commond=new CommondImpl();
    TestCommond test=new TestCommond(commond);
    test.sendCommond();




    综上所述:接口的功能:
    1 匿名类
    2 成员变量:public static final  简称:psf
    3 接口的实例化(实现接口的子类创造对象赋值给接口)
    4 接口的赋值(由接口赋值给实现接口的子类。通过强制转换)
    5 通过实现接口的子类的全路径来得到class。然后得到接口对象。最后调用接口方法。
    6 把接口当做参数传递并最后调用方法。
    展开全文
  • java中的接口能够被实例化吗?

    万次阅读 多人点赞 2019-04-24 11:25:39
    乍一听对接口(interface)实例化,这这这可能吗,怕不是疯了!下文首先通过在IDEA中编写代码演示说明,然后分析怎样操作才能对接口进行实例化。希望博主的博文能够对java学习道路上的你有所帮助,喜欢的话点赞留言...
  • java接口可以实例化吗?

    万次阅读 2018-06-20 17:35:25
    Java接口可以实例化吗?2016年03月29日12:51:30阅读数:7523Java接口可以实例化吗?接口不可以实例化。但是接口对象可以指向它的实现类对象接口可以看做特殊的抽象类,只是所有的方法都是抽象方法(没有实现的...
  • Java实例化对象的几种方式

    万次阅读 2017-10-12 11:28:36
    Java中创建(实例化对象的五种方式 1、用new语句创建对象,这是最常见的创建对象的方法。 2、通过工厂方法返回对象,如:String str = String.valueOf(23);  3、运用反射手段,调用java.lang.Class或者java....
  • 接口可以创建对象实例化吗?

    千次阅读 2021-01-05 17:31:27
    文章目录一、interface的基础知识1. 接口使用interface来定义2.... 接口中不可以定义构造器 意味着接口不能实例化5. Java开发中,接口通过让类去实现implement的方式去使用6. java类可以实现多个接
  • java实例化对象后面添加花括号的理解分析 昨天在看MyBatis官方文档时看到这么一段代码 return new SQL() {{ SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME"); FROM("PERSON P"); if ...
  • Java接口可以实例化吗?

    千次阅读 2019-03-27 21:21:33
    Java接口可以实例化吗? 接口不可以实例化。但是接口对象可以指向它的实现类对象接口可以看做特殊的抽象类,只是所有的方法都是抽象方法(没有实现的方法),接口的方法都是默认public abstract的, 所以不能被...
  • java对象实例化的几种方法

    万次阅读 2016-12-23 16:23:56
    Java 对象实例化的几种方法
  • Java产生Class类的三种实例化对象的方法 1.object.getClass 2.类名.class直接根据某个具体的类来取得Class实例化对象 3.Class.forName(String className) public class TestClass { public static void main(String...
  • java 为什么接口不能实例化

    千次阅读 2017-03-08 21:55:19
    今天有同学拿着这样一段代码来问我这个是不是java接口实例化,代码如下: class MyThread implements Runnable{ ............//此处省略 } //另一个类的main方法中: Runnable r = new MyThread(); 我就告诉...
  • java接口不能实例化原因

    千次阅读 2017-08-31 08:32:35
    [java] view plain copy class MyThread implements Runnable{   ............//此处省略  }  //另一个类的main方法中:  ...Runnable r = new MyThread();...具体实例化的是MyThread这
  • 比如说: interface Inter { public void function(); } class Main implements Inter { Main(){} private int n;... public void function() ... //这里是可以使用p.function()的,但是可不可以使用p.add...
  • Java中创建(实例化对象的五种方式 1、用new语句创建对象,这是最常见的创建对象的方法。 2、通过工厂方法返回对象,如:String str = String.valueOf(23);  3、运用反射手段,调用java.lang.Class或者java.lang....
  • java接口不能实例化原因浅谈

    万次阅读 多人点赞 2015-01-09 20:43:33
    java接口为什么不能实例化呢,图中可以看到,栈中存放的是per,值是堆中具体Person这个对象的地址,也就是per指向这个具体类的引用。而堆中一块地址,存放的值是Person这个类的成员变量(局部变量在执行时存放在栈中...
  • Java类加载过程和对象实例化详解

    千次阅读 2017-11-19 17:21:28
    Java虚拟机类加载过程 类加载时机 类加载过程 –加载 –验证 –准备 –解析 –初始 1、类加载时机  类从被加载虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载、验证、准备、解析、初始...
  • 不,您不能实例化接口。通常,它包含不完整的抽象方法(Java8中引入的默认方法和静态方法除外)。仍然,如果您尝试实例化一个接口,则会生成一个编译时错误,提示“ MyInterface是抽象的;无法实例化”。在下面的示例...
  • 深入理解Java对象的创建过程:类的初始化与实例化

    万次阅读 多人点赞 2017-05-18 14:17:45
    Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。...本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。
  • java接口实例化问题

    万次阅读 2012-10-12 16:22:13
    我们都知道,在java接口不能直接实例化。但是有的时候,我们会看到这种匿名内部类(假象的所谓内部类)实例化的代码。如下:  绑定View对象的监听方法调用   View.setOnClickListetener(new OnClickListener...
  • java由类的完整路径利用反射给接口注入对象,本人亲测可用,完整实例
  • List接口如何实例化?(Java

    千次阅读 2019-09-15 19:11:15
    List接口初始 错误写法 List<String> supplierNames = new List<String>(); supplierNames.add("sup1"); supplierNames.add("sup2"); supplierNames.add("sup3"); System.out.println(supplierNames....
  • java web中常用对象对应的实例化接口

    千次阅读 2015-09-22 13:51:24
    1. request对象是javax.servlet.HttpServletRequest接口实例化 2. response对象是javax.servlet.HttpServletResponse接口实例化 3. session 对象是javax.servlet.HttpSession接口实例化 4. ...
  • java实例化一个抽象类的对象

    千次阅读 2019-07-16 16:23:09
    不对啊,根据我的知识一个抽象类不能直接实例化一个对象出来,面向对象期末考试的卷子还有专门一道让你改错的题,一般抽象类直接实例化对象都是每年必考的错误点。那这个对象从哪实例化,国家分配的吗?先不管,结果...
  • java不能实例化类型

    千次阅读 2021-03-04 06:28:06
    Java8面向对象编程视频课程 1、 课程名称:String 对象的两种实例化方式 2、知识点 2.1、......当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在...
  • 详解Java类、对象实例化

    千次阅读 2015-11-06 11:44:08
    Java是一种面向对象的语言。由于具有面向对象特性的语言,Java支持以下基本概念: 多态性 继承 封装 抽象对象 实例 方法 消息解析 在本章中,我们将探讨类和对象这些概念。对象 - 对象具有...
  • 文章目录java接口为什么不能实例化呢?总结: java接口为什么不能实例化呢? 首先,我们需要明白实例化的含义。实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student...
  • Java类的定义及其实例化

    千次阅读 2019-06-14 21:29:55
    类是创建对象的模板,创建对象也叫类的实例化。 下面通过一个简单的例子来理解Java中类的定义: publicclassDog{ Stringname; intage; voidbark(){// 汪汪叫 System.out.println(“汪汪,不要过来”); } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 584,216
精华内容 233,686
关键字:

java接口实例化对象

java 订阅