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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾观富 中级黑马   /  2012-11-15 22:26  /  1552 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曾观富 于 2012-11-15 23:23 编辑

用实例作参数时,何时用class a形式,何时用new class()形式?
比如:
public void paint(Graphics g){}为什么不能写成public void paint(new Graphics()){}?
而addKeyListener(new KeyAdapter(){});就不能写成addKeyListener(KeyAdapter k{});?



评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
public void paint(Graphics g){}  是写了paint()方法,这是定义的,当调用的时候 就得 传入一个 Graphics g   的实例对象,即 public void paint(new Graphics()){}  
这个就相当于 当调用 paint方法时,Graphics g=new Graphics();  

而addKeyListener(new KeyAdapter(){});  是 匿名内部类    调用这个addKeyListener这个方法时,传入了没名字的 KeyAdapter实例对象

而addKeyListener(KeyAdapter k{});表示定义

总结下:定义一个函数 public void paint(Graphics g){}    addKeyListener(KeyAdapter k{});?

      调用一个函数 public void paint(new Graphics())      addKeyListener(new KeyAdapter(){});







回复 使用道具 举报
class a 是在定义方法的时候的形参,而new class()是在使用方法的时候的实参
在定义一个方法时,参数列表中应该给出形参的类型和变量名,因此像是public void paint(Graphics g){}是定义一个方法的时候的写法
而在使用一个方法的时候,需要传递的是所需要的数据,因为public void paint(new Graphics()){}是传入了一个 new Graphics()的对象
回复 使用道具 举报
public void paint(Graphics g){}为什么不能写成public void paint(new Graphics()){}?
这样写是可以的,类对象是可以做实例参数来参与程序之中进行使用的!
而addKeyListener(new KeyAdapter(){});就不能写成addKeyListener(KeyAdapter k{});
这里面的话是不可以这样的,因为new KeyAdapter(){}这是一个匿名子类,是整体包括大括号在一起是new KeyAdapter的子类的,这里的KeyAdapter不是抽象的类就是接口,因为抽象类和接口是不能创建实例对象的,所以,如果不创建子类而直接使用的话只能通过建立子类的对象来使用了,一般使用的格式  new 接口名/抽象类名(){};

其实这样使用的话是为了方便,开始学的人都不大理解,我看楼主应该先建立子类继承,通过子类的对象,然后在将子类的对象作为参数来使用,那就会很明白了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马