Java中的abstract实例解析

关于抽象类,首先由以下几点说明,然后我们根据例子来理解这些说明:

①用abstract修饰一个类时,该类是抽象类;用abstract修饰一个方法时,该方法是抽象方法。

②含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写

③抽象类不能被实例化

④抽象方法只需要声明,不需要实现。

对于上面的类Animal,可以看到他的所有子类Cat和Dog都重写了父类Animal的enjoy方法也就是说,也许,我们在父类中实现enjoy方法是没有什么意义的,反正子类总是要重写它的。这时候,为了简单,我们就可以只在父类中声明而不实现enjoy方法,由他的子类去实现enjoy方法。也就是,我们可以在父类中声明抽象的方法enjoy,根据第②条,含有抽象方法的抽象类也必须声明为抽象类。那么Animal就变成了如下的形式:

abstract class Animal{
         private String name;    
        Animal(String name){
               this.name=name;
        }        
       public abstract void enjoy();
}

而其他代码不需要做任何改变。

需要注意的是,即使Cat继承于抽象父类Animal,但是Cat可以选择依旧不去实现父类中的抽象方法enjoy,而是将Cat改成如下形式:

也就是说Cat不去实现enjoy,而是声明了enjoy为抽象方法,同时也把自己变成了抽象方法,事实上,Cat甚至可以不用声明enjoy这个抽象方法(即省掉第15句),只把自己声明为抽象类,这也是可以的。但是Cat的某个子类如过不是把自己声明为了抽象类,那么它就必须实现enjoy方法。

至于对第③条的理解,我们可以把抽象的类看做是一个残缺的类,因为他的某些方法没有实现,他并不知道在子类中这些抽象方法是如何实现的,所以具有不确定性,不能实例化抽象类。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值