- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章一篇文章带你了解Java基础-抽象由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法.
在继承过程中,我们知道父类的方法可以子类进行重写,而每个子类各自的实现都不尽相同。就好比动物都有吃的方法行为吧,而每个动物的子类对于吃的东西都可能不是相同滴,可是这导致了什么呢?
我们定义父类的方法主体是不是就没有任何意义了,因为在子类调用方法过程中,是调用了自己重写的方法,而不是父类的方法.
也就是说,父类声明了方法,子类去各自实现该方法即可。代表着父类可以不知道具体实现是什么,但是清楚的有什么方法是需要的。所以方法父类完全只需要提供一个没有方法体的方法签名即可,具体实现交给子类自己去实现.
而我们对于这种没有方法体的方法称为抽象方法。在Java语法规定,包含抽象方法的类就是抽象类.
定义抽象的关键字:abstract,接下来看看如何使用吧! 。
abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类.
抽象方法:
使用abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体.
定义格式:
权限修饰符 abstract 返回值类型 方法名 (参数列表),
代码如下:
1
|
public
abstract
void
eat();
|
抽象类:
如果一个类包含抽象方法,那么该类必须是抽象类.
注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类.
定义格式:
1
2
|
abstract
class
类名字 {
}
|
代码如下:
1
2
3
|
public
abstract
class
Animal {
public
abstract
void
eat();
}
|
我们将之前的动物类改造成抽象类,然后吃的方法也改造成抽象方法.
注意:一旦定义为抽象类后,子类继承父类时,是必须重写里面的抽象方法.
定义抽象父类:
1
2
3
4
5
6
7
8
9
|
package
com.na.pojo;
/**
* 先定义一个抽象父类 --> 动物类
* 动物都有一个吃的抽象方法
*/
public
abstract
class
Animal {
// 定义为抽象方法后,无需去做方法实体的实现!
public
abstract
void
eat();
}
|
定义子类:
猫咪:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package
com.na.pojo;
/**
* 定义猫类继承抽象动物类,
* 随之重写里面的吃行为,因为猫也有吃的行为,但是猫喜欢吃罐头
*/
public
class
Cat
extends
Animal{
// 抽象类的方法必须重写,不然编译会不通过。
public
void
eat() {
System.out.println(
"小喵咪都喜欢吃鱼罐头!"
);
}
/**
* 增加一哥猫咪特有的玩球方法()
*/
public
void
playBall() {
System.out.println(
"小喵咪都喜欢小球!"
);
}
}
|
小狗:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package
com.na.pojo;
/**
* 定义狗类继承抽象动物类,
* 随之重写里面的吃行为,因为狗也有吃的行为,但是狗喜欢啃骨头
*/
public
class
Dog
extends
Animal{
// 抽象类的方法必须重写,不然编译会不通过。
public
void
eat() {
System.out.println(
"小狗狗都爱啃骨头!"
);
}
public
void
walk() {
System.out.println(
"小狗在被我溜着!"
);
}
}
|
定义测试类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package
com.na;
import
com.na.pojo.Animal;
import
com.na.pojo.Cat;
import
com.na.pojo.Dog;
public
class
Demo {
public
static
void
main(String[] args) {
// 创建抽象类,抽象类不能创建对象
// Animal animal = new Animal();
// animal.eat();
// 创建小猫咪
Cat cat =
new
Cat();
cat.eat();
cat.playBall();
Dog dog =
new
Dog();
dog.eat();
dog.walk();
}
}
|
得到结果:
小喵咪都喜欢吃鱼罐头! 小喵咪都喜欢小球! 小狗狗都爱啃骨头! 小狗在被我溜着! 。
类的大致结构:
注意:假设抽象类可以创建对象,但是呢,里面的抽象方法是没有方法体给我们去实现,从而程序也是无法执行,所以不让我们创建对象.
对于抽象类的使用,以下为抽象类的使用上要注意的细节:
1.抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象.
假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义.
2.抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的.
子类的构造方法中,有默认的super(),需要访问父类构造方法.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package
com.na.pojo;
/**
* 先定义一个抽象父类 --> 动物类
* 动物都有一个吃的抽象方法
*/
public
abstract
class
Animal {
private
String name;
private
int
age;
// 可以有构造器
public
Animal(){
}
// 甚至可以有参构造器
public
Animal(String name,
int
age){
this
.name = name;
this
.age = age;
}
// 定义为抽象方法后,无需去做方法实体的实现!
public
abstract
void
eat();
}
|
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类.
未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计.
4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错.
如果子类不重写所有抽象方法,则类中可能会包含抽象方法。那么在创建对象后,调用抽象的方法,没有意义.
5.抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想.
抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现.
相信各位看官都对Java基础中的抽象的知识和使用有了一定了解,等待下一次更多Java基础的学习吧! 。
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我的更多内容! 。
原文链接:https://blog.csdn.net/weixin_45766180/article/details/119306290 。
最后此篇关于一篇文章带你了解Java基础-抽象的文章就讲到这里了,如果你想了解更多关于一篇文章带你了解Java基础-抽象的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试创建一个 Django 网站,每次在本地主机上运行/articles/api/article 页面时:我都会收到此回溯: Environment: Request Method: GET R
我正在尽最大努力理解开放图谱协议(protocol)中的一切含义阅读 FB page在上面和 OGP Page .这在 FB 和 OGP 的世界中究竟意味着什么: Note that the Open
我的 HTML/CSS 中存在页脚与文章内容重叠的问题。是的,我一直在网上搜索但似乎没有任何效果,我希望你知道它有什么问题。我在这里做了一个codepen: CodePen LINK
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我可以将变量作为警报显示在函数中,但无法将变量传递给文章。我做错了什么? 我知道“a”保存了正确的信息,因为我已经通过警报显示了它。 我尝试使用以下方式传递变量:placeholderContent.
这个问题已经有答案了: Rails article helper - "a" or "an" (6 个回答) 已关闭 3 年前。 是否有类似 [#pluralize in ActiveSupport]
这个问题已经有答案了: Rails article helper - "a" or "an" (6 个回答) 已关闭 3 年前。 是否有类似 [#pluralize in ActiveSupport]
我有以下型号。 Book has Articles (Article has foreign key to Book) Article has Images (Article has upto #ma
我创建了一个页面,该页面显示了单个 类别下的所有帖子,即如果我单击类别音乐,我将获得与音乐类别相关的所有文章。 但我的目标是创建一个过滤选项,它可以过滤掉某些类别,并且只显示与您过滤的类别相关的所有帖
我使用这样的代码: $query = "SELECT introtext FROM #__content WHERE alias = '$alias'"; $db->setQuery($query);
我在主页上设置了一些特色文章。显示的所有文章似乎都剩下太多填充。我知道足以进入 css 并在 layout.css 上编辑 .itembody 的填充或边距,但似乎没有任何改变。我希望我的文章通过模块
ORM 中存储文章及其修订的最佳实践是什么?当我自己用SQL存储时,我曾经有以下结构: articles [id, parent_id, name, text] 通过parent_id,我可以轻松识
我的 HTML : Interest About Interest
我正在用jade构建一个nodejs、express、mongodb博客。 我的文件夹结构是:项目/ 模块/ 观点/ 索引.jade 应用程序.js 文章提供者内存.js 文章provider-mon
我的问题比较具体,至少对我来说是这样。具体是因为在做了很多搜索之后我找不到任何有用的东西。因此,正如标题所说,我正在寻找一种算法,它会发现输入中给出的两篇文章是否“匹配”,但不是通常的字符串匹配意义上
关闭。这个问题是off-topic .它目前不接受答案。 9年前关闭。 锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我无法弄清楚动态编程的原
我有这个问题。我正在建立一个社交网站,我必须在两栏中创建帖子。父容器是一个部分,元素“post”是样式为 float: left 的文章。我如何让滑到那些较短的下方创建的空白空间的帖子? 最佳答案 c
这里有几个关于文件与数据库的问题,但我仍然不确定使用什么以及为什么在我的案例中应该使用它。 我的网站上有很多 HTML 文章(长度在几百到几千字之间)。在数据库 (MySQL) 中,我有一个没有搜索索
微信公众号文章 Semantic Kernel —— LangChain 的替代品? [1] ,它使用的示例代码是Python ,他却发了这么一个疑问: 支持的语言对比(因为 Sem
我想编写一个 polymer 元素来显示一些 WordPress 文章。 http://www.jsv-lippstadt.de/?json=get_category_posts&slug=app
我是一名优秀的程序员,十分优秀!