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关键字来修饰。
public class Sample { 
	public static void main(String[] args) { 
		Dog d = new Dog(); 
		d.jiao(); 
		d.eat(); 
		Cat c = new Cat(); 
		c.jiao(); 
		c.eat(); 
		Animal a = new Animal(); 
		a.jiao(); a.eat(); 
	} 
}
abstract class Animal { 
	abstract void jiao(); 
	abstract void eat(); 
}
class Dog extends Animal{ 

	@Override 
	
	void jiao() { 
		System.out.println("汪汪汪~"); 
	}
	
	@Override 
	
	void eat() { 
	System.out.println("狗吃粮"); 
	} 
}
class Cat extends Animal{ 

	@Override 
	
	void jiao() { 
		System.out.println("喵喵喵~"); 
	}
	
	@Override 
	
	void eat() { 
		System.out.println("猫吃鱼~"); 
	} 
}
class Pig extends Animal { 
	void gongbaicai(){ 
		System.out.println("猪拱白菜~"); 
	} 
}

上述代码中的Pig虽是Animal的子类,但是并未重写/覆盖/实现Animal中的抽象函数,所以编译报错!
要解决这个问题的只有两种方法:

  • 把Pig声明为抽象类
  • Pig重写这些抽象函数!

抽象类

具有抽象函数的类也被称之为抽象类,也必须用abstract修饰。抽象类不能创建对象,只有其实现子类能够创建对象。

抽象类的特点

  • 抽象类和抽象函数都需要被abstract修饰,抽象方法一定在抽象类中
  • 抽象类不能创建对象,因为如果一旦创建对象,在调用其函数时,函数没有具体执行内容
  • 只有覆盖了抽象类中所有的抽象函数后,子类才可以实例化。否则,该子类还是一个抽象类

抽象类和一般类的异同点

相同点:

  • 它们都是用来描述事物的
  • 它们之中都可以定义属性和行为

不同点:

  • 一般类可以具体的描述是,抽象类描述事物时会有一些不具体的信息
  • 抽象类比一般类可以多定义一个成员:抽象函数
  • 一般类可以创建对象,而抽象类不能创建对象

关于抽象类的几个细节问题

抽象类一定是一个父类吗?
答:是的,因为抽象类本身就是有多个事物进行抽取而来的

抽象类是否有成员变量、成员函数、构造函数呢?
答:有,抽象类与一般类唯一的区别就是抽象类中抽象函数,其他一律相同(抽象类不能创建对象)!

抽象类中是否可以不定义抽象函数?
答:可以的。有抽象函数的类一定是抽象类,抽象类不一定有抽象函数!

抽象关键字abstract不能与哪些其他的关键字共存?
答:

  • final:final修饰类时表示该类不能被继承,修饰函数时表示函数不能被重写;而抽象类本就是父类,并且其中的抽象函数就需要被子类重写。
  • private:private修饰函数表示函数被私有,不能被子类继承;而抽象类中的抽象函数本就是需要被重写才能赋予功能。
  • static:static修饰的函数是属于类的,随着类的加载被加载方法区中,和对象没有关系了,可以直接用类来调用静态成员。而抽象函数若被静态修饰,再被类调用就毫无意义。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:04:30  更:2021-10-06 12:06:43 
 
开发: 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/23 18:34:39-

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