抽象类与抽象方法

一、为什么使用抽象方法和抽象类

二、抽象方法
抽象方法指一些只有方法声明,而没有具体方法体的方法。

结构
abstract class 类名称 // 定义抽象类
{声明数据成员;访问权限 返回值的数据类型 方法名称(参数...)//定义一般方法{...}abstract 返回值的数据类型 方法名称(参数...);//定义抽象方法,在抽象方法里,没有定义方法体
}
**注意:**

普通方法必须要有方法体,抽象方法不能有方法体(大括号也没有)
抽象方法要用abstract修饰
抽象方法没有方法体,直接以分号结束。
public abstract void shout();
public abstract void eat();

三、抽象类
概念:包含抽象方法的类称为抽象类。抽象类为子类提供一个规范。目的是让子类继承(extends)。
结构:修饰符 abstract class 类名{}
可以定义:普通变量,抽象方法,构造方法,普通方法
注意:
若没有子类继承extends,则这种规范没有任何意义。
抽象类的定义方式关键字abstract
如果一个类包含抽象方法,那么该类必须是抽象类。

举例:public abstract class Animal {}
抽象方法shout eat

四、抽象方法的实现
抽象方法必须靠继承extends可以实现,继承抽象类的子类必须重写父类所有的抽象方法,否则,该子类也必须声明为抽象类。
关键字:extends
举例01:(1)定义一个抽象类Animal,包含name、age属性,
一个普通方法toString() 有一个抽象方法shout() 、 eat(),普通方法sleep() 、play()
(2)定义一个Dog类继承抽象类Animal,并且实现抽象方法
(3)定义一个Cat类继承抽象类Animal,并且实现抽象方法
(4)定义一个Tiger类继承抽象类Animal,并且实现抽象方法
(5)定义一个Goat类继承抽象类Animal,并且实现抽象方法
(6)定义一个测试类创建以上几种动物,并打印输出

五、注意
抽象类的使用原则 如下:
抽象方法必须为public 或者protected,抽象类默认为public的定义方式关键字abstract
抽象方法不能直接实例化,需要依靠子类使用关键字extends继承
一个子类只能继承一个抽象类
子类如果不是抽象类,必须重写抽象类中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为抽象类)
抽象类不能使用final关键字,因为抽象类必须有子类,而final定义的类不能有子类

六、总结
1.抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。
2.只有抽象类的非抽象子类才可以创建对象
3.抽象类中不一定包含抽象方法,但是有抽象方法的类必须定义为抽象类
4.抽象类中的抽象方法只是声明,不包含方法体。
5.抽象类的子类必须给出抽象类中抽象方法的具体实现,除非子类也是抽象类。
七.练习题

package case5;public class abstractTest {public static void main(String[] args) {/********* begin *********/// 分别实例化Student类与Worker类的对象,并调用各自构造方法初始化类属性。Student s=new Student("张三",20,"学生");Worker w=new Worker("李四",30,"工人");System.out.println( s.talk());System.out.println( w.talk());// 分别调用各自类中被复写的talk()方法 打印信息。/********* end *********/}
}// 声明一个名为Person的抽象类,在Person中声明了三个属性name age occupation和一个抽象方法——talk()。
abstract class Person {/********* begin *********/
String name;
int age;
String occupation;
abstract String talk(); /********* end *********/
}// Student类继承自Person类,添加带三个参数的构造方法,复写talk()方法 返回姓名、年龄和职业信息
class Student extends Person {/********* begin *********/
// public Student(){// }
public Student(String name,int age,String occupation){this.name=name;this.age=age;this.occupation=occupation;
}String talk(){return "学生——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!";
}/********* end *********/
}// Worker类继承自Person类,添加带三个参数的构造方法,复写talk()方法 返回姓名、年龄和职业信息
class Worker extends Person {/********* begin *********/
// public Worker(){// }
public Worker(String name,int age,String occupation){this.name=name;this.age=age;this.occupation=occupation;
}String talk(){return "工人——>姓名:"+name+",年龄:"+age+",职业:"+occupation+"!";
}/********* end *********/}

java抽象类与抽象方法详解+练习题相关推荐

  1. java抽象类和接口详解

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  2. Java抽象类与接口详解

    目录 1.抽象方法以及抽象类 1.抽象方法 2.抽象类 1.抽象类的注意事项: 2.为什么抽象类中要有构造方法 2.接口 1.接口的定义和使用 1.接口用关键字interface进行定义 2.接口不能 ...

  3. 抽象类和抽象方法详解

    一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和 ...

  4. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

  5. Java 中IO流详解(附实例代码/面试题)

    Java I/O流详解 前言 一.I/O流是什么? 二.IO流分类: 1. 流程图: io流对象 2. io流的优缺点: 3. io 流Java中用途有哪些? 三.一些 io 实例 四.面试题: 前言 ...

  6. java定时任务框架elasticjob详解

    这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...

  7. java提高篇之详解内部类

    转载自 java提高篇之详解内部类 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无 ...

  8. Java 并发之 AQS 详解(上)

    Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...

  9. 夯实JAVA基本之一 —— 泛型详解(1):基本使用

    前言:无论何时,相信自己. 相关文章: 1.<夯实JAVA基本之一 -- 泛型详解(1):基本使用> 2.<夯实JAVA基本之一--泛型详解(2):高级进阶> 3.<夯实 ...

最新文章

  1. nginx特定的 404页面利于seo
  2. 关于虚继承(在钻石继承体系中,一定要用虚继承!)
  3. OA系统常见的审批流程
  4. 让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新
  5. 调用其他文件的define_C与C++的互相调用!就像大学宿舍一样,我用你的,你用我的!...
  6. 监督学习 | CART 分类回归树原理
  7. Good Bye 2021: 2022 is NEAR A-Integer Diversity(水题)
  8. 代码块作用域内外的静态变量
  9. mysql 批量插入 性能_MySQL批量插入数据性能比较
  10. PIC仿真器接口定义及连接注意事项
  11. 百度的镜像网站,有意思…………
  12. 一种使用 PNP 作为开关管点亮LED的奇怪做法
  13. 01-选择属于自己的相机
  14. 一名普通22届本科毕业生|前端程序员|22年年终总结
  15. f5 gtm 工作原理_F5基本模块架构
  16. Odoo11入门请假单模块学习教程源码
  17. java毕业生设计运动会管理系统计算机源码+系统+mysql+调试部署+lw
  18. Java Swing 程序设计01
  19. Markdown语法简介,markdown导出PDF
  20. 计算机编码方式详解(Unicode、UTF-8、UTF-16、ASCII)

热门文章

  1. mybatis注解配置出现returned more than one row, where no more than one was expected
  2. 信息安全 CIO最关注什么?
  3. 摘:设置向文件中的输出格式
  4. 8.8线段树和树状数组
  5. Windows server 2003 R2之三:通过域对统一部署客户端软件
  6. 一起谈.NET技术,.Net Discovery系列之-深入理解平台机制与性能影响 (中)
  7. 用Scrum敏捷开发工具Leangoo做Sprint迭代管理
  8. 夫妻北漂10年后返乡,程序员丈夫花8万元将土屋改成别墅:边学边做
  9. 这个 MySQL bug 99% 的人会踩坑!
  10. 如何设计API返回码(错误码)?