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超类
…这非常清楚疑问,还有有用的链接!!:)