A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-14 18:42  /  3270 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public abstract void drawLine(int x1,inty1,int x2,int y2)
这是个抽象的方法,那在程序中应该怎么直接使用了呢,不是要通过子类来重写方法才能用么。
Graphics g=getGraphics();
g.drawLine(orgX,orgY,endX,endY);
                        

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
如果一个非abstract类继承抽象类,就必须实现基类中所有abstract方法,抽象方法可以有不同的实现。
回复 使用道具 举报
对象g调用的是Graphics的子类DebugGraphics的drawLine()方法,这个方法重写了Graphics里面的drawLine()方法,而不是调用的抽象方法,在这里应用了面向对象的多态性!

评分

参与人数 1黑马币 +1 收起 理由
凡延海 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1、抽象方法所在的类属于抽象类,而抽象类是不能实例化的,也就是不能new它的对象的。
2、要使用抽象类中的方法(包括抽象方法和非抽象方法),必须要子类继承它,如果是非抽象的,可以已实例化子类后调用,如果是抽象的方法,子类中必须实现这个方法
3、如果要让抽象类的子类能够实例化,其子类必须重写父类中所有的抽象方法。如果没有全部重写,这个子类也是一个抽象类,不能实例化(不能new)
4、可以通过父类定义对象,但引用必须指向实现其所有抽象方法的子类(属于多态的范畴)
5、如果抽象类中的抽象方法不超过三个,在程序中使用可以通过匿名类的方法使用
6.。。。。。。。。。。。。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢楼上解答,我明白了。看来还得多看看API文档才行。
回复 使用道具 举报
凡延海 发表于 2012-5-19 13:12
谢谢楼上解答,我明白了。看来还得多看看API文档才行。

我很蛋疼,想多拿点技术分呢。老老实实回答的很具体却没有技术分!哥们谢谢你的金钱哈!
回复 使用道具 举报
  1. package com.itheima.response;

  2. import java.awt.Graphics;
  3. import java.awt.image.BufferedImage;

  4. public class ResponseDemo10 {
  5.         private static final int WIDTH = 120;
  6.         private static final int HEIGHT = 25;
  7.         public static void main(String[] args) {
  8.                
  9.                 //BufferedImage:内存图像
  10.                 BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
  11.                  //Graphics:代表该图像的画笔
  12.                 Graphics g = image.getGraphics();
  13.                 System.out.println(g.getClass().getName());// sun.java2d.SunGraphics2D
  14.         }
  15. }
  16.        
复制代码
哥们,我遇到了同样的问题。这是验证的代码,实际上是有子类实现了Graphics类的。就是sun.java2d.SunGraphics2D。具体怎么实现的,我也不想去深究了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马