我试图通过这个例子来理解继承但不明白:我有一个简单的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
答案 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
:只有班级本身可以访问私人会员protected
:同一个包中的所有类和扩展父类的类都可以访问受保护的成员public
:所有课程都可以访问公共成员因此,如果您想直接访问积分p1
- p4
,则必须声明protected
。