我想当你从另一个对象扩展一个对象时,该对象然后接收所有变量以及那些变量的定义以及那个对象方法。所以当我有这样的代码时
import javax.swing.*;
import java.awt.*;
public abstract class Object extends JComponent{
private int xpos;
private int ypos;
private int height;
private int width;
private double rotate;
private Rectangle rect;
public Object(int p1, int p2, int w, int h, double r){
this.xpos = p1;
this.ypos = p2;
this.width = w;
this.height = h;
this.rotate = r;
rect = new Rectangle(xpos, ypos, width, height);
}
}
作为原始对象,然后是另一个像这样的对象:
import javax.swing.*;
import java.awt.*;
public class Block extends Object{
public Block(int p1, int p2, int p3, int p4, double r) {
super(p1, p2, p3, p4, r);
}
public void paintComponent(Graphics g){
Graphics2D gd = (Graphics2D) g;
gd.setColor(Color.BLUE);
gd.draw(rect);
}
}
为什么不是矩形" rect"被延长?我是java的新手,还在学习,所以请轻松上XD
答案 0 :(得分:3)
rect
在Object
中被标记为私有。因此,只有Object
类的实例才能看到它。即使是子类也无法在实现中看到它。你可以做两件事:
1)在Object
中为它创建一个getter方法。此方法是公开的,因此任何其他类(包括您的Block
类)都可以看到它。
public Rectangle getMyRect() {
return rect;
}
2)或将其标记为受保护或默认(无访问修饰符)。
protected Rectangle rect; // this way...
Rectangle rect; // ... or this way
P.S。不要命名类Object
。如果类在不同的包中定义,它将起作用,但类Object
具有特殊含义 - 所有类的最顶级父类 - 并且会使人感到困惑。
答案 1 :(得分:0)
扩展类时,可以访问公共和受保护的方法和变量。现在,rect是一个私有变量。要使其对扩展对象免费,只需使其受保护或提供允许访问的getRect()方法。
答案 2 :(得分:0)
它实际上已扩展但无法访问,因为您的变量rect被定义为私有。要在子类中访问,rect应该受保护。
或者你也可以为rect创建getter和setter方法。
答案 3 :(得分:0)
详细了解访问说明符。私有成员变量只能在类中访问。因此,即使你有一个扩展Rect的类,它仍然只在Object中可见。也不要使用类名'Object'。它是所有其他类扩展的超类
答案 4 :(得分:0)
扩展和访问是两回事......
在您的情况下,无法访问超类私有变量。您可以扩展超类的功能,但访问方法和变量取决于超类访问修饰符。
答案 5 :(得分:-1)
变量" rect"不会被延长。 "延伸"意味着您将该类作为父类。所以块类将继承父类包含的所有功能。所以块将获得所有方法,您也可以覆盖方法。因为rect是一个私有变量,除非你公开,否则块类不会看到它。 Extends基本上允许类继承父类的属性,方法和属性,但不继承私有变量。希望有所帮助。