Java抽象类
来源:互联网 发布:淘宝新规则2016及处罚 编辑:程序博客网 时间:2024/06/10 09:49
什么是抽象类?
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
abstract关键字
abstract修饰类
Java定义由abstract关键字修饰的类叫抽象类, 抽象类可以有构造方法,成员变量,方法等,它和普通类的区别是抽象类不能实例化,在其他方面和普通类并没有什么区别,所以抽象类只能被继承,抽象类就是为继承而存在的。
abstract修饰方法
abstract修饰的方法是抽象方法,只有方法的声明而没有方法的实现。语法格式:
public abstract int abstractMethod( int a );含有抽象方法的类一定是抽象类,但是我们也可以定义一个没有抽象方法的类是抽象类,你可能疑惑没有抽象方法为什么还要定义为抽象类,这里只有记住这个概念就好,没必要深究。
如果子类继承了抽象类,就必须重写抽象类中的全部抽象方法,如果没有重写全部的抽象方法则必须声明其子类也是抽象类。
注意:
- abstract不能和final一起使用
- abstract不能和private一起使用
因为private修饰的方法不能被子类重写。
- abstract不能修饰属性
- 抽象类可以有构造器
抽象类的构造器是用来给属性初始化的,并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。
- 抽象类是否可以有静态方法
抽象类可以有静态方法,依然用类名来调用
- abstract不能和static一起使用
- abstract不能修饰构造器
抽象类应用场景
系统类库中常见,如果抽象类只需要一个特定的系统子类操作,所以可以忽略掉外部子类。这样的设计在系统类库中会比较常见,目的是对用户隐藏不需要知道的子类。
abstract class A{//定义一个抽象类 public abstract void print(); private static class B extends A{//内部抽象类子类 public void print(){//覆写抽象类的方法 System.out.println("Hello World !"); } } public static A getInstance(){ return new B(); }}public class TestAbstract { public static void main(String[] args) { //此时取得抽象类对象的时候完全不需要知道B类这个子类的存在 A a = A.getInstance(); a.print(); }}模板方法设计模式
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
解决的问题:
- 当功能内部一部分实现是确定,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
- 编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式。
阅读全文
0 0
- java 抽象类,抽象方法
- java 抽象类,抽象方法
- java抽象函数,抽象类
- Java抽象类抽象方法
- java--抽象类、抽象方法
- java抽象和抽象类
- java抽象类、抽象方法
- java抽象类抽象方法
- java--抽象类/抽象方法
- java中的抽象类
- Java中的抽象类
- Java抽象类
- java抽象类
- java 抽象类 Shape
- java抽象类
- Java抽象类
- java抽象类
- java 抽象类
- tomcat部署war包
- 面向对象程序设计上机练习九(对象指针)
- 机器学习
- Retrofit网络请求库应用02——json解析
- Clone Graph
- Java抽象类
- 已知rsa的模数和指数 生成pem公钥文件
- 解决Linux下Python3交互式编程时方向键乱码问题
- Webbench源码分析之参数输入getopt_long(一)
- kubernetes skydns 路由解析
- java虚拟机运行时数据区简介
- lv扩容后resize2fs不生效的解决办法
- Effective C++ 02
- 1142: 二进制数的大小