目录

1.概念

2.抽象类的使用

2.1抽象方法

2.2抽象类

2.3抽象类的使用

2.4注意事项

1.概念

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法,普通方法,static方法,常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个"{}",这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指,没有方法体的方法,且抽象方法必须被abstract关键字所修饰。

拥有抽象方法体的类就被成为抽象类,抽象类必须使用abstract关键字所修饰,如果一个类包含抽象方法,所以该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象方法。

2.抽象类的使用

2.1抽象方法

使用abstract关键字修饰的方法就是抽象方法,值得注意的是抽象方法没有方法体,只有一个方法名。基本定义格式为:

修饰符 abstract 返回值类型 方法名(参数列表);

代码举例:

public abstract void func();

2.2抽象类

如果一个类包含抽象方法,那么该类必须是抽象类。

基本定义格式为:

abstract class 类名{
}

代码举例为:

public abstract void Test{public  abstract void func();
}

2.3抽象类的使用

继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则,从最初的父类到最终的子类都不能创建对象从而失去意义。

此时可以看到,子类没有重写父类的抽象方法时,会出现编译报错,现在我们给它重写父类抽象方法后,

现在,代码就没有报错了。

同样的,我们再试试,未重写抽象方法时,子类能否创建对象并调用高抽象方法。

报错信息很明显的提示了问题。重写之后:

abstract class Animalss{String name = "猫咪";abstract void eat();
}class Cats extends Animalss{@Overridevoid eat() {System.out.println(name + "正在吃饭");}
}
public class Test9 {public static void main(String[] args) {Cats cats = new Cats();cats.eat();}
}

运行结果为

因此,继承抽象类的子类必须重写父类所有的抽象方法!

此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法的重写也叫做实现方法。

2.4注意事项

关于抽象类的使用,以下为语法上要注意的细节。

1.抽象类不能创建对象,如果创建,会出现编译报错,只能创建其非抽象子类的对象(如果创建了抽象类对象,调用抽象的方法,但是抽象方法没有具体的方法体,就没有意义);

2.抽象类种=中,可以有构造方法,是供子类创建对象时,初始化父类使用的(子类的构造方法中,有默认的supepr(),需要访问父类的构造方法)

可以发现,此处编译报错,显示Employees是抽象的,不能被实例化。

我们接下来通过子类继承这个父类来试一下;

abstract class Employees{private String name;private int age;public Employees(String name, int age) {System.out.println("抽象类的构造方法已经执行!");this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}class Assit extends Employees{private int Assit_year;public Assit(String name, int age, int assit_year) {super(name, age);Assit_year = assit_year;}public int getAssit_year() {return Assit_year;}public void setAssit_year(int assit_year) {Assit_year = assit_year;}
}
public class demo2 {public static void main(String[] args) {Assit assit = new Assit("Mary",20,5);}
}

代码运行结果为:

此时我们加上一个子类来继承这个抽象父类之后,子类的对象就能够被实例化。

3.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类(不包含抽象方法的抽象类,目的就是不想让调用者实例化该对象,通常用于某些特殊的类的结构设计)。

4.抽象类的子类,必须重写抽象父类的所有抽象方法,否则会出现编译报错,除非该子类也是抽象类(假设不重写父类中所有的抽象方法,那么调用抽象方法会显得毫无意义)

Java抽象类(基础详解)相关推荐

  1. Java :内部类基础详解

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. public class OuterClass {pri ...

  2. Java 接口基础详解,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  4. Java串口通信详解(转)

    Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言     说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够 ...

  5. java io流详解_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操作 ...

  6. Java期末复习题详解

    Java期末复习题详解 选择题 1 .class: .java: .cpp: .txt: 2 3 4 封装: 继承: 覆盖: 重载: 5 构造函数: 特点: 6 异常处理: 注:catch可以进行多重 ...

  7. Java Servlet关键点详解

    Java Servlet关键点详解 1.理解Servlet的生命周期 Servlet引擎控制着Servlet的生命周期 Servlet的生命周期由以下三个方法进行描述(五个生命周期阶段) 1)初始化 ...

  8. 代码检查规则:Java语言案例详解

    本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...

  9. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

最新文章

  1. “别人家的小孩”是如何用一行代码手撕面试题的?
  2. [CSS] Target Positional Elements Using *-Of-Type CSS pseudo-classes
  3. nunit 2.2.3 released, 支持vs2005 和.net 2.0了.
  4. 打印异常堆栈_定位生产问题时,异常堆栈莫名丢了,何解?
  5. 开源软件使用_亲爱的父母:让您的孩子使用开源软件
  6. python怎样在一行中捕获多个异常
  7. 最流畅的手机,性能、跑分却弱爆了?2019年上半年手机数据报告出炉
  8. 图论:有源汇有上下界最小流
  9. 软件测试之如何进行易用性测试?
  10. 数学建模灵敏度分析是什么?为什么获奖论文基本都有!【科研交流】
  11. 关于浏览器自动转https
  12. 如何预防电脑辐射(转自j2medev)
  13. Android查看源代码网站
  14. 美国3D理发师可剪出球星脸发型
  15. 安全漏洞之SQL注入和shell注入
  16. vue-cli Webpack之Loader原理及自定义Loader
  17. MinGW-W64下载、配置教程
  18. 响铃:只做“连接器”,企业微信如何实现“人即服务”
  19. mac 备份文件 太大 时间机器_关于MAC 的TimeMechine备份,如何手动清除备份占用的空间?...
  20. 「跳一跳」两年后,广告“杀死”游戏小程序?

热门文章

  1. CentOS下安装Oracle 11.2.0.4(静默安装)
  2. 男友别再乱拍照了!6招让女友的旅游照片从路人变女神
  3. 【Java知识点整理】MarkDown语法和Java历史
  4. html中加入星空弹幕,js全屏星空背景发送文字弹幕动画特效
  5. 干货分享:QQ群排名霸屏优化规则靠前的新技术
  6. Github上的iOS App源码 (中文)
  7. 软件工程概论学习笔记(1)—— 软件
  8. 使用arp对舍友进行断网攻击
  9. Python学习:电影场次查询API
  10. 手机小技巧:小米手机怎么隐藏应用?