Java抽象类和抽象方法

首先,为什么需要定义抽象类:

如上图所示,Employee和Student拥有相同的属性-姓名。所以可以将getName方法放在位于继承关系较高层次的通用超类中。但是有的Employee和Student共同属性中不方便在Persion中实现,比如要实现一个getDescription方法,需要在Employee和Student中单独实现,这时,Person可以只定义getDescription方法但什么都不做,这时就可以用abstract关键字修饰这个方法。这就是抽象类和抽象方法的用处。

一些性质:

  • 包含一个或多个抽象方法的类本身必须被声明为抽象的
  • 应该尽量将通用的域和方法(不管是否是抽象的)放在超类中
  • 抽象方法充当着占位的角色,他们的具体实现在子类中。扩展抽象类可以有两种选择:一种是在抽象类中定义部分抽象类方法或不定义抽象类方法,这样就必须将子类也标记称为抽象类;另一种方法是定义全部的抽象方法,这样子类也就不是抽象的了。
  • 类即使不含抽象方法也可以被声明为抽象类
  • 抽象类不能被实例化

可以定义一个抽象类的对象变量,但是他只能引用非抽象子类的对象,如:

Person p=new Student(“ada”,“ssdfa”);

这里的p是一个抽象类Person的变量,Person引用了一个非抽象子类Student的实例。

关于是否可以省略Person中的getDescription方法而只在子类Student中定义getDescription方法,如果这样的话,就不能通过p调用getDescription方法类,因为编译器只允许调用在类中声明的方法。特别是面向接口编程的时候,这个问题特别重要。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值