在子类中调用方法

时间:2014-03-10 10:36:56

标签: java

我的代码如下

class Shape {
    void drawShape() {
        System.out.println("shape drawn of shape class");
    }

    void printStr() {
        System.out.println("checking");
    }
}

class Circle extends Shape {
    void drawShape() {
        System.out.println("shape drawn of circle class");
    }

    public void printNumber() {
        System.out.println("1");

    }
}

     public class TestShape {
    public static void main(String[] args) {
        Shape shape = new Circle();
        shape.drawShape();
        shape.printStr();
    }
}

这是输出

shape drawn of circle circle
checking

当我调用shap.drawShape()时,它正在执行我的子类的方法,但是当我试图调用shape.printNumber()编译器给出错误时,我的问题是使用相同的对象,如果是子类方法正在执行,(我知道它是重写的)为什么我不能调用子类方法?

5 个答案:

答案 0 :(得分:1)

因为Java是静态类型的,并且您的声明属于子类。要致电printNumber,必须使用

    Circle shape = new Circle();
    shape.drawShape();
    shape.printStr();
由于多态性,

drawShape()工作正常。

答案 1 :(得分:1)

printNumber方法在课程Circle中定义,但未在课程Shape中定义。

您的变量shape的类型为Shape。您无法在其上调用printNumber,因为该类Shape中不存在该方法。

答案 2 :(得分:1)

致电

Shape shape = new Circle();
shape.printStr();

你试图调用一个Shape不存在的方法

如果你这样做

Circle shape = new Circle();
shape.printStr();

然后编译器将知道在哪里搜索

答案 3 :(得分:0)

你的对象的类型是Shape,它是没有printNumber方法的超类。当你调用drawShape时,它会因为覆盖而调用子类方法。希望它能说清楚。

答案 4 :(得分:0)

也许你不理解继承的想法。这是一个类比:圆形是一个形状,但现在形状并不总是圆形,是吗?

相关问题