JavaSE-面向对象之抽象类与接口

JavaSE-面向对象之抽象类与接口

  1. 继承概念及应用
  2. 多态概念及应用
  3. 里式替换
  4. 上下转型的使用

、本章任务

  1. 完成抽象类概念学习及应用
  2. 完成接口概念学习及应用
  3. 完成Object类学习

三、本章目标

  1. 熟悉抽象类、接口概念
  2. 掌握抽象类创建及使用
  3. 掌握接口创建及使用
  4. 掌握抽象类及接口区别
  • 知识点

1、 抽象类与接口

1.1 抽象类
1.1概念

抽象类往往用来表示设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 
比如:动物,它只是一个抽象的概念,并没有一个 “东西”叫做 “动物”。所以,它并不能代表一个实体,这种情况下,我们就适合把它定义成抽象类。

1.2语法格式

修饰符 abstract class 类名(){ 
    //…… 
    abstract 方法名(); 
}

  1. abstract修饰:它修饰类就是抽象类,修饰方法就是抽象方法
  2. 含有抽象方法的类,必须是抽象类;抽象类必须被继承,抽象方法必须得重写
  3. 抽象方法只需声明,不需写具体实现
  4. 抽象类不能被实例化,即不能被new操作 abstract不能与final并列修饰同一类
  5. abstract不能与private,static,final并列修饰同一方法 abstract方法必须位于abstract类中

【示例】 
动物类的call()方法是抽象的,它的子类,鸟,狗,猫具体实现抽象方法。

1.2 接口
2.1概念

Java接口是一些方法声明的集合,一个接口只有方法的声明没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。

作用

1)Java是一种单继承的语言

2)实现多态

2.2语法格式

定义接口

[访问控制符] interface <接口名>{

    类型标识符final 符号常量名n = 常数;

    返回值类型  方法名([参数列表]);

    …

}

实现接口

[访问控制符] class 类名 [implements <interface>[,<interface>]*],]

{

    //类体,必须实现接口中的方法

}

特性 
我们可以把接口看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量

接口不可实例化,可结合多态进行使用(接口 对象=new 对象())

接口里的成员属性全部是以 public(公开)、static(静态)、final(最终) 修饰符修饰

接口里的成员方法全部是以 public(公开)、abstract(抽象) 修饰符修饰

接口里不能包含普通方法

子类继承接口必须实现接口里的所有成员方法,除非子类也是抽象类

【示例】 
定义动物接口,包含一个call()抽象方法。定义具体实现类-鸟,狗,猫类。

1.3 抽象类与接口的对比

普通类

抽象类

接口

代表一类实体,可以被实例化

代表一类实体,但不能被实例化

不能代表一类实体,只能代表功能或是属性

单继承

单继承

多实现

已经很具体,没有再抽象的需要

在多个普通类中有共用的方法或属性又有相同方法的不同实现方式

单纯的规范,单纯的功能或属性需要独立体现出来

举个例子

有四个方法:吃饭,穿衣,跑步,开豪车;

吃饭,穿衣,跑步这三件事情,普通人都做得到,可以说是 “共性”的行为,只是具体行为实现不同;开豪车不是普通人可以做到的,比较 “独特”。

吃饭,穿衣,跑步三个行为适合放在抽象类,开豪车适合放在接口。

2、Object类讲解

Object类是所有Java类的祖先,每个类都使用Object作为超类。

  1. 所有对象(包括数组)都实现这个类的方法。
  2. 在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。
  3. 可以使用类型为Object的变量指向任意类型的对象。

重点讲解:toString()、equals()、hashCode()三个方法。 
:toString() 方法实现了什么功能? 
:toString() 方法将根据调用它的对象返回其对象的字符串形式。 
问:当 toString() 方法没有被覆盖的时候,返回的字符串通常是什么样子的? 
:当 toString() 没有被覆盖的时候,返回的字符串格式是 类名@哈希值,哈希值是十六进制的。举例说,假设有一个 Employee 类,toString() 方法返回的结果可能是 Empoyee@1c7b0f4d。

问:euqals()函数是用来做什么的? 
:用来检查一个对象与调用这个equals()的对象是否相等。 
问:使用Object类的equals()方法可以用来做什么比较? 
:调用它的对象和传入的对象的引用是否相等。也就是说,默认的equals()进行的是引用比较。如果两个引用是相同的,equals()函数返回true;否则,返回false。

问:hashCode()方法是用来做什么的? 
:hashCode()方法返回给调用者此对象的哈希码(其值由一个hash函数计算得来)。这个方法通常用在基于hash的集合类中,像HashMap,HashSet和Hashtable。 
问: 在类中覆盖equals()的时候,为什么要同时覆盖hashCode()? 
: 在覆盖equals()的时候同时覆盖hashCode()可以保证对象的功能兼容于hash集合。这是一个好习惯,即使这些对象不会被存储在hash集合中。

3、 类与类之间的关系

请访问天亮教育论坛查看!

五、总结

见:JavaSE-抽象类接口总结.xmind

六、作业

1、掌握抽象类的概念及定义

2、掌握接口的概念及定义

3、掌握接口抽象类区别及关系

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值