抽象类的详解(了解并一定程度掌握)

  • abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。

  • 抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类

  • 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。

  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。

  • 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

通过一个父类Action以及一个子类A来实现讲解。(感兴趣的也可以通过Person(抽象类)->Studen(抽象类)->per)来进行探索如果子类也是抽象类的情况(实际就是通过per来实现Student以及Person的所有抽象方法的重写来实现调度)

  package com.oop.demo08;
  //抽象类的所有抽象方法,继承了它的子类,都必须要实现它的抽象方法,除非该子类本身也是抽象类则需要子类的子类去实现
  public abstract class A extends Action{
      @Override
      public void doSomething() {
  ​
      }
  }

这就是对应的子类A

  package com.oop.demo08;
  public abstract class Action {
     public abstract void doSomething();
    public void hello(){
  ​
      }
  }

这就是对应的父类Action

首先:abstract修饰的类就是抽象类 :本质为类需要子类去继承extends但是只能单继承(而之后的接口可以多继承可类似于插头只能有一个头但有多个电器可以连接)

abstract修饰方法则该方法为抽象方法:只有方法的名字(),没有方法的实现,即为只是约束没有方法体~要有人帮它实现,一般来说是子类。

  
  对于抽象类的所有抽象方法,继承了抽象类的子类,都必须要实现它的抽象方法,除非该子类本身也是抽象类则需要子类的子类去实现(即为父债子偿)

例如上方的代码父类Action即为一个被abstract修饰的一个抽象类,其内包含一个抽象方法public abstract void doSomething();只有abstract修饰词以及函数的命名而没有方法体,还包含一个非抽象方法即为:public void hello(){ }.而子类A只包含了一个对于父类抽象方法doSomething()的一个重写方法。

总结抽象类的特点:

  
  1.不能new这个抽象类的对象,只能靠子类去实现它(如上方代码实际就是通过方法的重写来实现它);这就相当于一个规则的约束
  例如主类new一个Action类会报错:'Action' is abstract;cannot be instantiated即表示无法new出sbatract类的对象,至能new其子类A的对象来实现其中的抽象方法。
  2.抽象类里面可以写普通方法,甚至可以没有抽象方法
  3。但是抽象方法必须在抽象类中
  抽象类的实质:抽象的抽象,实际上就只是一个约束,即上方的三大约束
  
  思考? 既然抽象类无法new对象那么是否存在构造器  存在!可以通过查看class文件来查看后发现存在构造器方法public Action()作用可以为对应于子类的构造器来实现相关构造,(因为子类的构造器一般会默认先启动父类构造器
  )而且还可以自己设置一些有参构造器,甚至该抽象类的子类中的构造器也可以调用该有参构造器super(参数列表);即可。实际上对于抽象方法的执行,只是通过建立子类对象并通过子类对象来调用自己对于父类抽象方法的重写方法。
  而对于抽象类存在的意义为:可以将一些公有代码抽象出来,减少重复代码,提高开发效率

一点缺点:是基于extends来确定的继承关系,故而只能够单继承,即只能通过一个子类来调用其父类或者说父类的父类......的抽象方法。解决:下节所讲的接口来实现类似于多继承的实现(实际上JAVA只能支持单继承)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光的样子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值