通过OBJECTS和INHERITANCE访问方法

时间:2014-02-24 06:28:38

标签: java inheritance

考虑这个子类:

public class Circle extends BasicAreas{

 public static void main(String args[])
 {
    BasicAreas ba = new BasicAreas();
    Circle c = new Circle();
    c.PrintCircleArea(ba);
 }


 void PrintCircleArea(BasicAreas ba)
 {
     System.out.println("Area of circle is : "+areaCircle(3.14));
 }
}

和父类:

class BasicAreas{

    double areaCircle(double radius)
    {
       return 3.14 * radius * radius;
    }

    int areaSquare(int side)
    {
       return side * side;
    }

    int areaRectangle(int len, int breadth)
    {
       return len * breadth;
    }
}

现在,我对此非常困惑......:

System.out.println("Area of circle is : "+areaCircle(3.14));

当我extend超级班级时......我可以在不使用上述instantiated object的情况下访问该班级的方法....但是 当我不扩展class时,我可以使用object来访问其方法,如:

System.out.println("Area of circle is : "+ba.areaCircle(3.14)); /* "ba" being object */

所以我的问题是我应该何时更喜欢使用object以及何时使用extend来访问其他class methods ...并且有什么不同之处他们之间的基本水平??

学习java ...所以请放轻松...我知道这个问题非常愚蠢,但没有明确的答案......我也有可能这个问题可能在概念上也是错误的!!!

4 个答案:

答案 0 :(得分:4)

  

所以我的问题是我应该何时更喜欢使用对象以及何时使用extend来访问其他类方法......以及它们在基本级别上的区别是什么?

继承表示is-a关系。但是构图代表了一种关系。您可以选择这两个中的任何一个来解决您的问题,但要做出好的设计,在正确的设计中进行选择非常重要。

所以只有当子类是一个超类时才应该使用继承。例如,在上面的示例中,circle是basicArea。否则使用合成。

你可以在网上看到这个article或其他很多其他人可以通过例子找到这两者之间的差异。

答案 1 :(得分:1)

当您的类不在继承层次结构中时,您应该使用object方法。扩展类时,子进程默认获取方法,就好像它是自己的方法一样。这是因为子类是超类的子类。即在你的情况下,Circle IS-A BasicAreas

如果不扩展类,则只要实例化对象,就无法访​​问方法。

答案 2 :(得分:1)

在这两种情况下,您都在使用对象访问方法。

  

当我扩展超类时...我可以访问该类的方法   不使用像上面那样的实例化对象

这是错误的。

在第一种情况下,您正在访问实例areaCircle()上的c方法。

答案 3 :(得分:1)

When A class extends a class它可以访问超类中的方法,即

double areaCircle(double radius)

在您的情况下和您正在写作时

System.out.println("Area of circle is : "+areaCircle(3.14));

这个声明你实际上是使用对象(this)来访问这个方法,这里唯一的一点就是你没有创建这个对象。

这句话将被解释为

 System.out.println("Area of circle is : "+this.areaCircle(3.14));

所以你总是需要对象来访问一个方法,直到它不是静态的。因为您可以直接使用类名访问静态方法。