[JavaSE]有关抽象类的概念与思考

抽象类

相关概念:

使用关键字abstract定义的类即为抽象类。

包含一个或多个抽象方法的类,必须声明为抽象类。而且这些方法必须在其子类中实现。值得注意,抽象类中也可以存在普通的字段和方法。

扩展抽象类的两种选择:

1、在子类中保留一部分或全部的抽象方法仍未定义,这样的话子类也必须声明为抽象的。

2、在子类中实现所有的抽象方法,这样子类就不是抽象的了。

抽象类不能被实例化
但是可以定义一个抽象类的对象变量,引用子类的对象。例如:

public abstract class Person{
    ...
}
public class Student extends Person{
    ...
}

Person p = new Student(...);

思考:抽象类存在的意义

当看到抽象类的概念时,我也会有时会觉得何必呢,但是当我们在高度抽象一类事物的时候,由于是提取的此类事物公共行为,但具体到某个具体的事物的时候,同一行为又会有不同的表现。

从别人的博客中看到一个例子,就是假如我们在写俄罗斯方块游戏时,方块是一个对象,而方块又有六种类型,所以需要扩展六个子类,但是六种方块它们的翻转方式又各有不同,比如田字型的方块,它怎么翻转都是自身的样子,而一字型的方块翻转无外乎两种情况,那么如果只在方块类中实现子类中去覆盖那么需要写的代码太多了。
能否在有一种方法可以清晰的表达方块这些对象呢。
其实,这是就可以将方块类定义为抽象类,翻转方法定义为抽象方法,不需要去实现,而是在6种方块子类中去实现各自具体的翻转方法。这样一来,既清晰的表达了每个方块的翻转方法,又减少了代码量。

如此一来,对抽象类的理解又能更加透彻一点了~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值