当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

为什么要在定义抽象类时操纵abstract关键字[Java编程]

赞助商链接



  本文“为什么要在定义抽象类时操纵abstract关键字[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

众所周之,在任何面向对象的语言中(包含Java、C#),在定义抽象类时必须利用abstract关键字.固然这已经习已为常了,但实际上abstract是为了在实现接口或担当抽象类避免歧议而必须存在的.

看以下代码:

abstract class Class1
{
  abstract void method();
}

上面的代码是一个典型的抽象类,在定义类时和定义办法时都利用了abstract.但从编译器的角度来说,在定义类时完好可以不利用abstract,以下面的代码所示:

class Class1
{
  abstract void method();
}

关于上面的代码,编译器在编译时并不会产生奇特,只要检测到类中有一个用abstract关键字的代码,便可以在编译的历程中自意向Class1增添abstract,也就是说,在定义Class1时增添abstract的工作应当由编译器来完成.

固然上面的历程看起来没什么问题,也并不难实现,但各位不要忘了,实现抽象类除了上面的方法,还有别的一种方法,这就是实现接口,而并不实现接口中的全部办法.看下面的代码:

interface MyInterface
{
  public void method1();
  public void method2();
}
abstract class MyClass implements MyInterface
{
  public void method1()
  {
    
  }
}

上面代码中MyClass类并未实现method2办法,也并示在定义办法时利用abstract关键字,然后,method2办法实际上就是abstract办法.

大家可以想象,假如在定义抽象类时不利用abstract关键字会怎么样呢?看下面的代码:

interface MyInterface
{
  public void method1();
  public void method2();
}
class MyClass implements MyInterface
{
  public void method1()
  {
    
  }
}

上面的代码一定会编译出错的,因为编译器蒙了.在面向对象语言中规定,一个普通类必须实现接口中的全部办法.而在上面的代码中,method2办法未实现.而编译器无法判断MyClass类是抽象类,还是普通类.假如按着普通类来处理,则会编译出错,假如按着抽象类来处理,则完好符合面向对象法则.因此,就产生了歧议.当编译器在编译源代码时,一定会产生错误,不然大概会编译成和源代码的含义差别的二进制目标文件.

当然,上面的代码也可以设置默许的法则,也就是按着普通类处理不通过期,就按着抽象类来处理.但这又会带来另一个问题.假如开辟人员忘掉录现某个接口的办法,那不是这个类就会被编译器认为是抽象类了吗?因此,为了保险起见,编译器的计划者特地为抽象类指定一个abstract关键字,也就是说,这个类能否是抽象类,应由开辟人员通过编码的方法来指定,而不是由编译器自做主张.

从上面的描写可以看出,加abstract关键字主如果为了避免普通类在实现接口时产生的歧议.假如假定面向对象语言中没有接口,abstract关键字完好可以去掉.当然,担当抽象类也和实现接口近似.

象面向对象语言中的静态办法很多就没有静态类的概念(Java没有,C#有).因此,在定义类时加不加static,并不会产生奇特,所以static关键字在定义静态类时也就不是必须的了.

文章根源:http://www.cnblogs.com/nokiaguy/archive/2008/09/30/1302482.html


  以上是“为什么要在定义抽象类时操纵abstract关键字[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 为什么要用内部类:掌握框架
  • 为什么要上溯造型
  • 为什么要用AWT
  • <b>真的,为什么要用Hibernate?</b>
  • Java网络编程从入门到精通(15):为什么要操纵SocketAddress来
  • 为什么要在定义抽象类时操纵abstract关键字
  • <b>为什么要在operator=中返回"*this"的引用</b>
  • <b>Java多线程初学者指南(9):为什么要举行数据同步</b>
  • 为什么要进级到Win 7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .