我第一次尝试使用java.awt.Graphics并遇到了很多困惑。
Graphics gp = new Graphics();
并且编译器抛出一个错误,指出无法实例化抽象类。 我查看了oracle java文档,然后尝试了以下内容:
import java.awt.Graphics;
public abstract class GUI extends Graphics{
public void painter(){
GUI gp = new GUI();
gp.drawString("Hello People!",2,10);
}
}
仍然显示相同的错误:GUI是抽象的;无法实例化
我对抽象类和实现一无所知。但是,我设法在Oracle的文档中获得了一些知识。但我仍然困惑,请有人帮助我。非常感谢你!!!!
我也尝试在java.awt.Graphics()中删除abstract scope of GUI, but the compiler again threw another error saying: GUI does not override the abstract method
dispose();`;
答案 0 :(得分:0)
抽象类是一个无法实例化的类。它的唯一目的是扩展其他类。
抽象类是一个被声明为abstract的类 - 它可能也可能是 不包括抽象方法。抽象类无法实例化, 但它们可以被分类。
抽象方法是一种没有声明的方法 实现(没有大括号,后跟分号),就像 这样:
abstract void moveTo(double deltaX,double deltaY);如果是一个班级 包括抽象方法,然后必须声明类本身 摘要,如:
public abstract class GraphicObject {
// declare fields
//declare nonabstract methods
abstract void draw(); }
抽象类的主要目的是在子类中使用公共代码,但抽象类不应该有自己的实例。
您可以在此处详细了解:Abstract Methods and Classes
答案 1 :(得分:0)
最好的方法是使用Graphics2D并使用Graphics进行转换。
答案 2 :(得分:0)
抽象类是一个通知要做什么的类,它具有可以由其子类使用的普通方法的实现。
例如,您可以将类Vehicle定义为抽象,以定义其他车辆类的行为。其他类需要扩展此Vehical类并提供抽象方法的实现。
您无法创建Abstract类的对象,因为您需要使用抽象类来扩展其他类,然后您可以创建子类的对象。 更多参考here
答案 3 :(得分:0)
您不想重新实现整个图形堆栈;不要重新实现图形。相反,你需要从某个地方获取图形上下文;这通常由AWT工具包处理,您只需覆盖组件中的void paint(Graphics g)
。另见:http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html#getGraphics()。
答案 4 :(得分:0)
创建JComponent
的子类,而不是Graphics
。然后将Graphics
的实例传递给paintComponent
方法:
class GUI extends JComponent {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("Hello People!", 2, 10);
}
}
如果您尝试自己创建Graphics
或子类的实例,那么它们将无法使用它。
答案 5 :(得分:-1)
删除abstract
:
import java.awt.Graphics;
public class GUI extends Graphics{
public void painter(){
GUI gp = new GUI();
gp.drawString("Hello People!",2,10);
}
}
答案 6 :(得分:-1)
这是因为您必须创建一个扩展GUI
的类或使用已定义的类,该类也扩展GUI
。
此外,您可以删除abstract
关键字,以使用您拥有的关键字。