考虑这个子类:
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 ...所以请放轻松...我知道这个问题非常愚蠢,但没有明确的答案......我也有可能这个问题可能在概念上也是错误的!!!
答案 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));
所以你总是需要对象来访问一个方法,直到它不是静态的。因为您可以直接使用类名访问静态方法。