继承对象的区别

时间:2014-06-17 10:39:50

标签: java

class C1 {
....
}

class C2 extends C1 {
 ....
}

public class Test {
    public static void main(String args[]) {
        C1 obiect = new C2();

    }
}

为什么我可以用C1制作一个C2对象? C1 obiect = new C2();C2 obiect = new C2();

之间的区别是什么?

4 个答案:

答案 0 :(得分:5)

稍微调整一下你的代码:

class Animal {
  // ...
}

class Dog extends Animal {
  // ...
}

public class Test {
    public static void main(String args[]) {
        Animal obiect = new Dog(); // A DOG (RHS) is ALSO an ANIMAL(LHS)

    }
}

注:

如果您指向DOG并说它是动物,它只能做所有动物所做的事情(在ANIMAL类中定义的一般行为)。它可以睡觉(),吃()等。但它不能调用树皮()因为所有动物都不会吠叫。即,通过引用使用超类引用的子类实例,您将限制子类的所有方法的访问,即,您只能访问重写方法。

答案 1 :(得分:3)

你可以这样做的原因是因为多态性是面向对象的原则之一。

这个想法是对基类的引用(在您的情况下为C1),可以将实例保存到任何子类(在您的情况下为C2)。这允许您从接口解耦实现。

至于你的第二个问题,不同之处在于,当你声明引用属于C2类型时,你将致力于C2实现,而当引用的类型为{{1}时您可以将实现更改为任何C1子类,或更改为C1本身。

答案 2 :(得分:0)

 C1 object=new C2();

此语句表示使用类C1

的引用创建C2类对象

这主要用于面向对象原则Method Overriding。借助于此,您可以调用C2类中定义的重写方法

答案 3 :(得分:0)

这称为父类引用子类对象。 C1是C2的父级,因此它可以用作对其所有子级以及它自己类型的对象的引用。

之间的基本区别
C1 obiect1 = new C2(); 

C2 obiect2 = new C2();

object1 不了解子类(C2)方法和变量。因此,除了覆盖方法之外,您无法使用object1访问任何方法或变量od。但是您可以使用object2访问父(C1)和子(C2)方法和变量。

class Parent {
   public String name;
}

class Child extends Parent{
  public  int salary;
}

public static void main(String[] args)
{
    Parent parent = new Child();
    parent.name= "abcd"; // allowed
    //parent.salary= 12; // Not allowed
    Child child = new Child();
    child.name= "abcd"; // allowed
    child.salary= 12; // allowed
}