paint()方法中不是用一个抽象类的实例做为参数
请看:
public abstract class A
{
public abstract void a();
}
class B extend A
{
public void a()
{
System.out.println("B");
}
}
class C
{
public void c(A aa)
{
.....
}
}
class D
{
C cc = new C();
A bb = new B();
cc.c(bb);
}
请看:
public abstract class A
{
public abstract void a();
}
class B extend A
{
public void a()
{
System.out.println("B");
}
}
class C
{
public void c(A aa)
{
.....
}
}
class D
{
C cc = new C();
A bb = new B();
cc.c(bb);
}
非常感谢,再你给的例子中,B实现了A的方法,在D中A bb创建的实际上是B的一个实例,
然后用C的方法c()处理bb。你再看看我在书上看到的那个例子,实际并没有在哪儿实现Graphics的方法,运行的时候,
也没问题。不只是为什么?我会再加分
比如DateFormat是一个抽象类,系统有提供了SimpleDateFormat类,你可以根据自己的需要实现DateFormat类的抽象方法,也可简单的用SimpleDateFormat类
java.awt
Class Graphics
java.lang.Object
|
+--java.awt.GraphicsDirect Known Subclasses:
DebugGraphics, Graphics2D
{
g.fillRect(30,10,200,100);
g.clearRect(50,30,70,50);
g.drawRcet(60,50,40,20);
g.drawLine(10,55,250,55);
}
} 是典型的up casting技术
比如,交通工具是抽象类,汽车是其子类
那么可用:交通工具 aa=new 汽车();
来实例化汽车,明白吗??
可是我们并没有指定到底用哪一个具体的子类,skyyong说它的直接子类有:
DebugGraphics, Graphics2D 那我们的g到底是哪一个字类的实例呢?
sorry,我很笨,请不吝赐教
Graphics 是抽象类,但g是它的子类的实例。
可是我们并没有指定到底用哪一个具体的子类,skyyong说它的直接子类有:
DebugGraphics, Graphics2D 那我们的g到底是哪一个字类的实例呢?
sorry,我很笨,请不吝赐教”到底是哪个子类的实例就要看你调用paint方法的时候传什么参数了。
/**
* Creates a graphics context for this component. This method will
* return <code>null</code> if this component is currently not
* displayable.
* @return A graphics context for this component, or <code>null</code>
* if it has none.
* @see java.awt.Component#paint
* @since JDK1.0
*/
public Graphics getGraphics() {
if (peer instanceof java.awt.peer.LightweightPeer) {
// This is for a lightweight component, need to
// translate coordinate spaces and clip relative
// to the parent.
if (parent == null) return null;
Graphics g = parent.getGraphics();
if (g == null) return null;
if (g instanceof ConstrainableGraphics) {
((ConstrainableGraphics) g).constrain(x, y, width, height);
} else {
g.translate(x,y);
g.setClip(0, 0, width, height);
}
g.setFont(getFont());
return g;
} else {
ComponentPeer peer = this.peer;
return (peer != null) ? peer.getGraphics() : null;
}
}