免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 811 | 回复: 0
打印 上一主题 下一主题

abstract修饰符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-24 21:24 |只看该作者 |倒序浏览

               
                abstract修饰符可用来修饰类和实例成员方法

  • 用abstract修饰的类表示抽象类,抽象类不能被实例化。没有用abstract修饰的类称为具体类,具体类可以被实例化。


  • 用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。没有用abstract修饰的方法称为具体方法,具体方法必须要有方法体。

使用abstract修饰符需要遵守以下语法规则:
    (1)抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类,否则编译出错。
    (2)没有抽象构造方法,也没有抽象静态方法。
    abstract class Base {
        abstract Base() {}               //编译出错,构造方法不能是抽象的
       static abstract
void method1();
//编译出错,static和abstract修饰符不能连用
        static void method2() {...}      //合法,抽象类中可以有静态方法
    }
    (3)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。抽象类不能被实例化,然而可以创建一个引用变量,其类型是一个抽象类,并让它引用非抽象的子类的一个实例。
    (4)抽象类及抽象方法不能被final修饰符修饰。即,abstract与final不能连用。这是因为abstract与final的作用是恰恰相反的,如:抽象类只允许创建其子类,而final修饰的类不允许拥有子类; 抽象方法必须被子类的具体方法来实现,而final修饰的方法不允许被子类方法覆盖。
为什么抽象类不允许被实例化?

      
  • 在语义上,抽象类表示从一些具体类中抽象出来的类型。从具体类到抽象类,这是一种更高层次的抽象。如:苹果类、香蕉类和桔子类是具体类,而水果类则是抽象类,在自然界并不存在水果类本身的实例,而只存在它的具体子类的实例。

              Fruit fruit = new Apple(); //创建一个苹果对象,把它看做是水果对象

      
  • 在语法上,抽象类中可以包含抽象方法,如果抽象类可以实例化,那么在访问抽象方法时将无法执行,因为抽象方法中根本就没有方法体。由此可见,Java编译器不允许创建抽象类的实例是必要的。
      

                abstract class Base {
               
public void method1() {...}       //具体方法
                    public abstract void method2();   //抽象方法
             }   
                Base base = new Base();  //假定Java编译器没有报错
             base.method1();
            
base.method1();         
//运行时Java虚拟机无法执行这个方法
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21755/showart_145257.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP