当实例来自另一个类时,如何访问超类的实例?

时间:2015-11-30 14:30:02

标签: java inheritance

我试图通过这个例子来理解继承但不明白:我有一个简单的Point.java,Quadrilateral.java和Rectangle.java(Quadrilateral的子类)

public class Quadrilateral{

private Point p1;
private Point p2;
private Point p3;
private Point p4;

public Quadrilateral(int x1, int y1,int x2, int y2, int x3,int y3, int x4, int y4){


     p1 = new Point(x1, y1);
     p2 = new Point(x2, y2);
     p3 = new Point(x3, y3);
     p4 = new Point(x4, y4);

}

public Point getP1(){
    return p1;
}

public Point getP2(){
    return p2;
}

public Point getP3(){
    return p3;
}

public Point getP4(){
    return p4;

}

然后在子类矩形中,点应该从Quadrilateral的矩形继承。如果我想访问点形式矩形类,也许知道Xposition,我该怎么办?如果我在矩形类中写:Point x = getP1()。getX(); (getX()在Point类中)它不起作用,编译错误的idenftifier预期。但即使我只写:Point x = getP1(); //来自superclass.Same错误。谢谢你

public class Rectangle extends Quadrilateral{



    public Rectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4,int y4){
        super(x1,y1, x2,y2, x3,y3, x4,y4);

    }

   //how to access here point1, piont2 form superclass?
   //Point x = getP1(); doesn't work

2 个答案:

答案 0 :(得分:0)

如果您想直接从派生类访问它们,则应该使用Point s protected而不是private。否则,您只需使用getPX()间接访问它们。

要在派生类中访问它们,您需要使用方法。例如:

public class Rectangle extends Quadrilateral{
    public Rectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4,int y4){
        super(x1,y1, x2,y2, x3,y3, x4,y4);
    }

    //just an example:
    public Point getPoint1and2Sum() {
        return getP1().translate((int) getP2().getX(), (int) getP2().getY());
    }
}

或者,如果您制作Point变量protected

public class Rectangle extends Quadrilateral{
    public Rectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4,int y4){
        super(x1,y1, x2,y2, x3,y3, x4,y4);
    }

    //just an example:
    public Point getPoint1and2Sum() {
        return p1.translate((int) p2.getX(), (int) p2.getY());
    }
}

答案 1 :(得分:0)

您应该查看不同的可见性类型。

  • private:只有班级本身可以访问私人会员
  • default(无可见性描述符):同一个包中的所有类都可以访问成员
  • protected:同一个包中的所有类和扩展父类的类都可以访问受保护的成员
  • public:所有课程都可以访问公共成员

因此,如果您想直接访问积分p1 - p4,则必须声明protected