Java “扩展”是否也扩展变量?

Java “扩展”是否也扩展变量?,java,drawing,hierarchy,extends,Java,Drawing,Hierarchy,Extends,我想当你从另一个对象扩展一个对象时,这个对象会接收所有的变量和这些变量的定义,以及这个对象的方法。所以当我有这样的代码时 import javax.swing.*; import java.awt.*; public abstract class Object extends JComponent{ private int xpos; private int ypos; private int height; private int width; pri

我想当你从另一个对象扩展一个对象时,这个对象会接收所有的变量和这些变量的定义,以及这个对象的方法。所以当我有这样的代码时

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

当您扩展类时,可以访问公共和受保护的方法和变量。现在,rect是一个私有变量。要使其对扩展对象免费,只需对其进行保护或提供一个getRect方法以允许访问。

它实际上是扩展的,但不可访问,因为变量rect被定义为private。要在子类中访问,应保护rect

或者您也可以为rect创建getter和setter方法。

rect在对象中标记为private。因此,它仅对对象类的实例可见。即使是子类也无法在其实现中看到它。你可以做两件事:

1在对象中为其创建一个getter方法。此方法是公共的,因此任何其他类(包括块类)都可以看到它

public Rectangle getMyRect() {
    return rect;
}
2或将其标记为受保护或默认无访问修改器

protected Rectangle rect;  // this way...
Rectangle rect;  // ... or this way

请注意,不要将类命名为对象。如果类是在不同的包中定义的,它将起作用,但是类对象有一个特殊的含义——所有类中最顶层的父类——并且会让人感到困惑。

变量rect不会被扩展。extends表示将该类作为父类。因此block类将继承父类包含的所有功能。所以block将获得所有方法,您也可以重写这些方法。因为rect是一个私有变量,除非将其公开,否则块类不会看到它。扩展基本上允许类继承父类的属性、方法和属性,但不允许继承私有变量。希望有帮助

了解有关访问说明符的更多信息。私有成员变量只能在类中访问。因此,即使您有一个扩展了Rect的类,它仍然只在对象中可见。也不要使用类名“Object”。它是一个超级类,所有其他类的扩展和访问是两件不同的事情


在您的情况下,超类私有变量是不可访问的。您可以扩展超类的功能,但访问方法和变量取决于超类访问修饰符。

为什么矩形矩形不扩展?你们希望它在哪里?为什么你们要重新定义对象类?你知道这会带来多个问题吗?为什么?已经有对象类了吗?如果有,我不知道它,我希望rect被扩展过来,因为我认为扩展就是这样工作的。上层的所有变量和方法都扩展到下层。是否已经有对象类?如果有我不知道的地方,我强烈建议您停止这样做,学习Java。对象是Java中所有类的基类,在基础课程中有介绍。