黑马程序员技术交流社区

标题: 关于接口使用new操作符的问题 [打印本页]

作者: 刘海芳    时间: 2013-5-31 23:04
标题: 关于接口使用new操作符的问题
本帖最后由 刘海芳 于 2013-6-7 16:06 编辑

接口也可以new,使用new创建的是实现了接口的子类。这句话我不太理解。如果多个类实习了接口,那么new接口创建的子类是谁的呢?
如:
接口代码:
  1. public interface Foo {
  2. }
复制代码
子类1代码:
  1. public class Foo1 implements Foo {
  2. }
复制代码
子类2代码:
  1. public class Foo2 implements Foo {
  2. }
复制代码
那么到底创建是谁的子类呢?
作者: 赵利斌    时间: 2013-5-31 23:10
子类子类的  你的父类是哪一个呢?你在哪里new了?
作者: ZhaoYuBetter    时间: 2013-5-31 23:13
不明白意思
作者: 廖志强    时间: 2013-5-31 23:26
亲,抽象类是不能被实列化的,因为他是抽象的,接口也是一样,怎么办呢,子类可以,对于子类实现接口的,必须实现接口的所有抽象方法,接口有构造方法,是用来给子类创建对象用的,这是多态的应用。
作者: 山鹰    时间: 2013-5-31 23:55
接口不可以创建对象,因为接口是特殊的抽象类
接口中的都有固定的修饰符:
常量:public static final String NAME;
方法: public abstract void show();
楼主说的是不是多态的体现,接口应用指向子类的对象
[code]public interface A {
        public static final int Num = 3;
        public abstract String str();
       
        public abstract void show();
}

public class B implements A{

        public static void main(String[] args) {
               
                A a = new B();//接口引用指向子类对象
        }

        public void show() {//重写接口的方法
               
        }

        public String str() {//重写接口的方法
               
                return null;
        }
}
作者: 王浩骅    时间: 2013-6-1 00:10
这主要是多态的问题,至于你所说的到底创建的是谁的,就像普通的创建啊子类对象一样,比如Zi  extend Fu{},那么就是Fu f = new Zi();那么出现的就是指向的Zi的对象。就是这个样子。

作者: 李玉江    时间: 2013-6-1 00:15
是有点不太明白   不过我的理解是在匿名内部类中用到的多态的知识。也就是其中的new一个接口的子类实现类对象。比如
interface A
{
        void show();
}
class Demo
{
        public static void main(String[] args)
        {

    new A(){
                                public  void show()
                                {
                                        System.out.println("匿名内部类对象");
                                }
                        }.show();//new A(){}是接口的实例类类对象。调用他复写接口后的show方法
         
                System.out.println("父类指向自己的子类实现类对象");
        }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2