2014-10-07 63 views
5

考虑下面的代码:了解的drawLine是如何工作的

import javax.swing.*; 
import java.awt.*; 

public class NewClass extends JPanel { 
    public void paintComponent(Graphics g) { 
     g.drawLine(0, 0, 90, 90); 
    } 

    public static void main(String[] args) { 
     JFrame jf = new JFrame(); 
     jf.add(new NewClass()); 
     jf.setSize(500, 500); 
     jf.setVisible(true); 
    } 
} 

为什么它画一条线,如果该方法drawLine是抽象的,因为我设法理解,抽象方法没有定义?

预先感谢您!

+0

它的多态性。一些实现该方法的子类将被传入。 – 2014-10-07 12:09:46

+0

不应该在'paintComponent(Graphics g)'方法中调用'super.paintComponent(g);'?就是想。 – EpicPandaForce 2014-10-07 12:10:58

回答

3

paintComponent()得到一个非抽象子类Graphics,它实现drawLine()。它必须得到一个非抽象的子类,因为抽象类不能被实例化。

+4

而实际的实现代码将是平台特定的,并且由于OOPS和多态的魔力,我们可以很容易地使用它,而不必知道它的内部结构。 1+ – 2014-10-07 12:08:59

2
public void paintComponent(Graphics g) 

这里的图形有抽象方法drawLine没有实现一个主体,但其子类具有drawLine的具体实现。当paintComponent被调用时,Graphics的适当的非抽象子类的对象被传递