IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java抽象类与抽象方法详解+练习题 -> 正文阅读

[Java知识库]java抽象类与抽象方法详解+练习题

抽象类与抽象方法

一、为什么使用抽象方法和抽象类
请添加图片描述

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

结构
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知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:07:59  更:2021-11-28 11:09:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:51:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码