抽象类

定义:
所谓抽象类就是指在普通类的结构里面增加抽象方法的组成部分,抽象方法指的是没有方法体的方法,同时抽象方法还必须使用abstract关键字进行定义。拥有抽象方法的类一定属于抽象类,抽象类要使用abstract声明。

关于抽象方法与普通方法:
1.所有的普通方法上面都有一个"{}",来表示方法体,有方法体的方法一定可以被对象直接调用;
2.抽象类中的抽象方法没有方法体,声明时不需要加"{}",但是必须有abstract声明,否则在编译时将出现语法错误。

例:定义抽象类

abstract class A{public void fun(){System.out.println("存在方法体的方法");}//此方法并没有方法体的声明,并且存在abstract关键字,表示抽象方法public abstract void print();
}

注意:抽象类不能直接实例化对象。

抽象类的使用原则:
1.抽象类必须有子类,即每一个抽象类一定要被子类所继承,但是在Java中每一个子类只能够继承一个抽象类,所以具备单继承局限;
2.抽象类的子类(子类不是抽象类)必须覆写抽象类中的全部抽象方法(强制子类覆写);
3.依靠对象的向上转型概念,可以通过抽象类的子类完成抽象类的实例化对象操作。

例:正确使用抽象类

abstract class A7{  //定义一个抽象类public void fun(){  //普通方法System.out.println("存在方法体的方法");}//抽象方法public abstract void print();
}
//一个子类只能继承一个抽象类,属于单继承局限
class B7 extends A7{public void print(){    //抽象类的子类,而且是一个普通类System.out.println("666");  //强制要求覆写的方法}
}
public class Test1_1_4_1 {public static void main(String args[]){A7 a=new B7();  //向上转型a.print();  //被子类覆写过的方法a.fun();}
}
//结果
//666
//存在方法体的方法

抽象类的相关限制

1.抽象类里面由于会存在一些属性,那么在抽象类中一定会存在构造方法,目的是为属性初始化,并且子类对象实例化时依然满足先执行父类构造再调用子类构造的情况;
2.抽象类不能使用final定义,因为抽象类必须有子类,而final定义的类不能有子类;
3.抽象类中可以没有任何抽象方法,但是只要是抽象类,就不能直接使用关键字new实例化对象;
4.抽象类中依然可以定义内部抽象类,而实现的子类也可以根据需要选择是否定义内部类来继承抽象内部类。
例:定义抽象类内部的内部类

abstract class A8{   //定义一个抽象类abstract class B8{ //定义内部抽象类public abstract void print();}
}
class X extends A8{ //继承static内部抽象类public void print(){System.out.println("666");}class Y extends B8{ //定义内部抽象类的子类,此类不是必须覆写public void print(){    //方法覆写}}
}

5.外部抽象类不允许使用static声明,而外部的抽象类允许使用static声明,使用static声明的内部抽象类就相当于是一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。
例:利用static定义的内部抽象类为外部抽象类

abstract class A8{   //定义一个抽象类static abstract class B8{  //static定义的内部类属于外部类public abstract void print();}
}
class X extends A8.B8{public void print(){  //继承static内部抽象类System.out.println("666");}
}
public class Test1_1_4_2 {public static void main(String args[]){A8.B8 ab=new X(); //向上转型ab.print();}
}
//结果
//666

6.在抽象类中,如果定义了static属性或方法时,就可以在没有对象的时候直接调用。
例:在抽象类中定义static方法

abstract class A8{   //定义一个抽象类public static void print(){    //static方法System.out.println("666");}
}
public class Test1_1_4_2 {public static void main(String args[]){A8.print();    //直接调用static方法}
}
//结果
//666

抽象类应用——模板设计模式

例:在抽象类的普通方法中调用抽象方法

abstract class A8{   //定义一个抽象类public void fun(){ //此为普通方法this.print();   //在普通方法中直接调用抽象方法}public abstract void print();  //此为抽象方法
}
class X extends A8{ //抽象类必须有子类public void print(){System.out.println("666");}
}
public class Test1_1_4_2 {public static void main(String args[]){A8 a=new X(); //通过子类实例化抽象化对象a.fun();  //抽象类中的普通方法}
}

Java学习总结:13相关推荐

  1. java学习笔记(13) 第13章 - 常用类

    第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...

  2. java学习第13天

    继承的概念:(个人理解) 抽取子类的共性(属性和方法),再创建一个类将这些共性写里面(这个类称为父类),子类继承(extends)父类,就具备了这些共性(父类的属性和方法) 语法格式: class 子 ...

  3. java学习笔记13:正则表达式、System类、Date类、Calendar类

    一.正则表达式 1.概述:是指一个用来描述或者匹配一系列符合某个句法规则的字符串:其实就是一种规则,有自己特殊的应用. 2.正则表达式的组成规则 (1).字符 表达式 代表含义 x 字符 x.举例:' ...

  4. Java学习笔记13

    Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看源码中hashC ...

  5. java学习(13):scanner中的方法

    //Scanner类中的方法 //优点一: 可以获取键盘输入的字符串 //优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便: public static void Scanne ...

  6. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...

  7. 2021年,Java开发者值得学习的13项技能

    本文分享自百度开发者中心2021年,Java开发者值得学习的13项技能 作者 | Olivia Cuthbert 译者 | 王强 策划 | 刘燕 如果你想在这个竞争激烈的世界里,成为一名熟练开发 Ja ...

  8. 2021 年,Java 开发者值得学习的 13 项技能

    作者 | Olivia Cuthbert 译者 | 王强 策划 | 刘燕 如果你想在这个竞争激烈的世界里,成为一名熟练开发 Java 项目的开发人员,你应该学习很多东西才行.你需要掌握许多技能,具体应 ...

  9. int arr 13 java,java学习13 - 数组的定义、操作、异常、二维数组

    续java学习12: 1.数组,引用类型变量,保存数据实际是保存的数组的首地址 2.定义数组容器三要素,数据类型,大小(长度),数组名 3.数组的定义公式一:数据类型[] 数组名 = new 数据类型 ...

  10. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

最新文章

  1. ADSL自动更换IP地址源代码
  2. [学习笔记]最小圆覆盖
  3. SpringMVC详细示例实战教程
  4. mysql主从读写Windows_Windows操作系统下的MySQL主从复制及读写分离
  5. bootstrap轮播图自动播放响应式箭头居中
  6. Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦
  7. Boostrap技能点整理之【bootstrap简介】
  8. Django之templates模板
  9. html新增伪类,css3新增伪类有哪些
  10. 第三届IEEE普适媒体计算国际会议(U-Media 2010
  11. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (7) - 流水线前端/译码后指令缓存
  12. Kindle基础使用指南
  13. 计算机视觉教程章毓晋课后答案6,计算机视觉教程 教学课件 章毓晋 CCV01.pdf
  14. 塑源码是什么_源码是什么意思啊
  15. loadrunner12录制事件一直卡在11就不动了,大佬们,求助啊!!!
  16. 干货教程:如何把一张照片用PS做成漫画风格(附最新视频教程)
  17. php自动上传到onedrive,让iPhone里的照片自动上传备份到OneDrive
  18. 魅族note8完美打开usb调试模式的教程
  19. Android进阶——巧借自定义VideoView实现Activity的动态视频背景
  20. 两年工作经验面试经验以及面试题分享

热门文章

  1. 3D广告建模-C4D Octane渲染视频教程
  2. [导入]笔记本”终极“散热方案
  3. DataX 安装和使用
  4. 织梦文章内容屏蔽替换词语多个敏感字词
  5. 【Flask】视图高级
  6. 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
  7. flash模拟EEROM
  8. Realm_King 之 .NET操作XML完整类
  9. Earth to developers: Grow up!
  10. 建立企业级产品测试报告体系(概述)