2014-06-20 135 views
-1

我想当你从另一个对象扩展一个对象时,那个对象就会接收到所有的变量,这些变量的定义以及那个对象的方法。所以,当我有这样的代码“扩展”是否也扩展变量?

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); 
    } 

} 

为什么不矩形“矩形”正在扩大了吗?在java中我很新,所以请继续阅读XD

+0

_为什么不是矩形“矩形”被扩展了?_你认为它在哪里? –

+0

你为什么重新定义'Object'类?你知道这会给多个问题吗? –

+0

为什么?有没有一个对象类?如果有我不知道它 – MagnusCaligo

回答

0

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

0

它实际上是扩展但不可访问,因为您的变量rect定义为私有。要在子类中访问矩形应该是保护

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

3

rectObject中被标记为私人。所以它只对你的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

变量“rect”不会被扩展。 “扩展”意味着你将这个类作为父类。所以块类将继承父类包含的所有功能。所以block会得到所有的方法,你也可以重写方法。由于rect是一个私有变量,除非您公开它,否则它不会被块类看到。 Extends基本上允许类继承父类的属性,方法和属性,但不支持私有变量。希望有所帮助。

0

了解有关访问说明符的更多信息。私人成员变量只能在类中访问。因此,即使您有一个扩展Rect的类,它仍然只在Object中可见。也不要使用类名'Object'。它是超类,所有其他类EXTEN

0

扩展和访问是两回事....

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