澄清命令接口的层次结构

时间:2014-11-21 10:22:46

标签: java

在类Parent中的以下程序中,类Child实现了MyInterface。这就是为什么obj1(Parent)instanceof MyInterface是假的,而obj2(Child)instanceof MyInterace是真的吗?

    class InstanceofDemo {
    public static void main(String[] args) {

        Parent obj1 = new Parent();
        Parent obj2 = new Child();

        System.out.println("obj1 instanceof Parent: "
            + (obj1 instanceof Parent));
        System.out.println("obj1 instanceof Child: "
            + (obj1 instanceof Child));
        System.out.println("obj1 instanceof MyInterface: "
            + (obj1 instanceof MyInterface));
        System.out.println("obj2 instanceof Parent: "
            + (obj2 instanceof Parent));
        System.out.println("obj2 instanceof Child: "
            + (obj2 instanceof Child));
        System.out.println("obj2 instanceof MyInterface: "
            + (obj2 instanceof MyInterface));
    }


}

class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}

提供以下输出:

obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true

2 个答案:

答案 0 :(得分:0)

因为只有Child类实现MyInterface,所以如果您希望Parent类的实例成为您的MyInterface接口的实例,则必须实现{您MyInterface课程中的{1}}。像这样:

Parent

这将给出这个输出:

class Parent implements MyInterface{}
class Child extends Parent {}
interface MyInterface {}

答案 1 :(得分:0)

就现实世界的物体而言,它非常简单。使用给定的java对象映射以下示例。 我有以下类和接口:

class HumanBeing{}
interface Teachable{}
class Teacher extends HumanBeing implements Teachable{}

真实世界示例:

上面的类和接口定义可以解释如下:

  • “人类”存在于世界
  • 所有“老师”都是“可教育的人”

成为一名教师意味着必须成为一名HumanBeing。 现在说例如Gopal只是“人类”而Varma是“老师”

HumanBeing gopal = new HumanBeing();
HumanBeing varma = new Teacher();

现在评估以下问题,您将很容易理解这个概念:

  • 是Gopal Human Being?是的
  • 是Gopal Teachable? NO
  • 是Gopal老师? NO

  • 是Varma Human Being?是的,因为他是老师(所有老师都是人)

  • 是Varma Teachable? YES
  • 是Varma老师? YES