Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过对象访问方法与通过继承访问方法_Java_Inheritance - Fatal编程技术网

Java 通过对象访问方法与通过继承访问方法

Java 通过对象访问方法与通过继承访问方法,java,inheritance,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.p

以这个儿童班为例:

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));
当我扩展一个超级类时,我可以访问该类的方法,而不必像上面那样使用一个实例化对象,但是
当我不扩展
类时,我可以使用
对象访问其方法,如:

System.out.println("Area of circle is : "+ba.areaCircle(3.14)); /* "ba" being object */
所以我的问题是,我应该在什么时候使用
对象
s,什么时候使用
扩展
访问其他
类方法
…它们在基本级别上有什么区别


学习java…所以请放轻松点…我知道这个问题很愚蠢,但没有明确的答案…我也愿意接受这个问题在概念上也可能是错误的

当类不在继承层次结构中时,应该使用对象方法。当您扩展一个类时,子类在默认情况下会获得该方法,就好像它是自己的方法一样。这是因为子类是超类的susbclass。i、 e.在您的情况下,
圆圈是一个基本的careas


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

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

当我扩展一个超类时…我可以访问该类的方法 不使用上述实例化对象

这是错误的

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

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

继承表示一种is-a关系。但是这个组合代表了一种“有-有”的关系。你可以选择这两种方法中的任何一种来解决你的问题,但是要做出一个好的设计,重要的是要在正确的方法中进行选择

因此,只有当子类是一个超类时,才应该使用继承。例如,在上面的示例中,圆圈是basicArea。否则使用构图


您可以在网上看到这一点或其他许多信息,并举例说明两者之间的差异

当一个类扩展一个类时,它可以访问超类中的方法,即

双区域圆(双半径)

在你的情况下,在你写作的时候

System.out.println("Area of circle is : "+areaCircle(3.14));
此语句表示您实际上正在使用对象(
this
)访问此方法。这里唯一的一点是您没有创建此对象

这句话的解释是这样的

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

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

@NoobEditor我指的是类层次结构。感谢您指出这一点。您的回答解决了问题
这两个问题之间的区别是什么
我什么时候应该使用哪一个
仍然没有答案!!:)@NoobEditor,当类之间存在继承关系时,可以直接使用方法。但是您的类与继承无关,那么您必须实例化该类并调用方法。现在清楚了吗?这个问题超出了Java。它实际上是关于面向对象编程中定义的对象和类的概念。你已经熟悉了吗?是的……我只是对这一事实感到困惑,它们
继承
对象
都提供了几乎相同的特性,只是使用方式略有不同……那么当???+1:同意@NambiNarayanan时应该使用哪一个呢……
所以只有在子类is-a超类
…这非常清楚疑问,还有有用的链接!!:)