07-面向对象特征
来源:互联网 发布:ubuntu添加中文输入法 编辑:程序博客网 时间:2024/05/29 02:02
面向对象的特征:
A: 封装:
B: 继承:
1. 概述:
实际开发中,我们发现好多类中的内容是相似的,于是我们就把这些相似的内容抽取出来放到一个类中, 然后让那多个类和这个类产生一个关系,这个关系就是继承. 继承用 extends 关键字表示.
2. 格式:
class 类A extends 类B { //子承父业
}
/*
class Student extends Person {
}
*/
3. 叫法:
类A: 子类, 派生类
类B: 父类, 基类, 超类
4. 特点:(类与类之间的继承特点)
A: Java只支持单继承,不支出多继承。 (先这么记忆,不严谨)
B: Java支持多层继承。
5. 注意事项:
A: 子类只能继承父类的非私有成员。(成员变量和成员方法)
B: 子类不能继承父类的构造方法,但是可以通过super来使用。
C: 不要为了部分功能而去使用继承。
什么时候使用继承呢?
当类与类之间满足"is a"的关系时,就可以考虑使用继承.
//类A is a 类B: 类A是子类, 类B是父类
6. 好处
A: 提高代码的复用性.
B: 让类与类之间产生关系, 是多态的前提.
7. 弊端
耦合性增强了.
开发原则: 高内聚, 低耦合.
内聚: 指的是类自己独立处理问题的能力.
耦合: 指的是类与类之间的关系.
8. 继承中的成员特点:
成员变量:
构造方法:
成员方法:
继承涉及到的其他知识点:
方法重写: // 方法覆盖, 方法复写
概述:
子父类间,子类出现和父类一模一样的方法时,称为方法重写.
什么时候使用方法重写?
当子类需要继续沿袭父类的功能,但是功能主体又有自己特有需求的时候,就可以考虑使用方法重写。
注意事项:
1、父类的私有方法子类不能重写.
2、重写时,子类方法的访问权限不能低于父类方法的访问权限。
访问权限修饰符的范围从小到大分别是:
private, 默认, protected, public
3、静态只能覆盖静态。
//其实严格意义上来讲, 这个算不上方法重写的注意事项.
final:
是一个关键字, 表示最终的意思, 可以修饰类, 修饰变量, 修饰方法.
修饰的类: 不能被继承, 但是可以继承别的类.
修饰的变量: 是一个常量, 只能赋值一次.
如果是基本类型, 是值不能改变.
如果是引用类型, 是地址值不能改变, 属性值可以改变.
修饰的方法: 不能被子类重写.
抽象类:
概述:
有抽象方法的类一定是抽象类(或者接口),抽象用 abstract 修饰.
特点:
A: 有抽象方法的类一定是抽象类(或者接口),抽象用 abstract 修饰.
B: 抽象类不能实例化.(抽象类不能new)
那么,抽象类如何实例化呢?
可以通过创建其子类对象来完成初始化.
C: 抽象类的子类:
要么也是抽象类, 这样不用重写所有的抽象方法.
要么是普通类,必须重写所有的抽象方法.
D: 抽象类有构造方法.
既然抽象类都不能创建对象, 那么要构造方法有什么用?
用于子类对象访问父类数据前, 对父类数据进行初始化.
抽象类中,能有非抽象方法吗?
可以.
抽象类中, 抽象方法和非抽象方法的作用分别是什么?
非抽象方法: 作用是让子类来继承的, 提高代码的复用性.
抽象方法: 作用是强制要求子类必须完成某些事情.
不能和 abstract 共存的关键字有哪些?
private: 私有方法不能重写, 而抽象方法必须重写, 它们属于设计冲突.
final: 被final修饰的方法不能被子类重写,而抽象方法必须重写, 它们属于设计冲突.
static: 静态方法可以被类名点的形式调用,但是抽象方法是没有方法体的, 这样做没有意义.
接口:
特点:
A: 接口用关键字 interface 修饰.
B: 类与接口之间是实现关系, 用 implements 关键字表示.
C: 接口不能实例化.
那么,接口如何实例化呢?
通过创建其子类对象,完成初始化.
D: 接口的子类:
要么也是抽象类, 这样不用重写所有的抽象方法.
要么是普通类,必须重写所有的抽象方法.
类与接口之间的关系:
类与类: 继承关系. 只能单继承,不能多继承, 但是可以多层继承.
类与接口: 实现关系. 可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口.
接口与接口: 继承关系. 可以单继承,也可以多继承.
成员特点:
接口中有且只能有常量或者抽象方法.
常量的默认修饰符: public static final
抽象方法的默认修饰符: public abstract
JDK1.8以后, 接口中可以定义有方法体的方法了, 如果是静态方法可以直接写,如果是非静态方法要加 default.
C: 多态:
概述: 同一事物在不同时刻表现出来的不同形态(状态).
前提条件:
A: 要有继承(实现)关系.
B: 要有父类(父接口)引用指向子类对象.
C: 要有方法重写.
成员访问特点:
成员变量: 编译看左边, 运行看左边.
// 看左边有没有 具体用的左边的
成员方法:
非静态方法: 编译看左边, 运行看右边.
静态方法: 编译看左边, 运行看左边.
结论: //记忆
只有非静态方法是编译看左,运行看右. 其他都是编译和运行都看左边.
原因是因为: 方法有重写.
好处:
A: 提高代码的维护性.
B: 提高代码的扩展性.
/*
多态在实际开发中的应用:
父类型可以作为方法的形参的数据类型进行传递, 这样可以接受其任意的子类对象.
*/
弊端:
父类引用没有办法使用子类的特有成员(成员变量和成员方法).
如何解决这个弊端?
可以通过向下转型解决.
Animal a = new Cat(); //向上转型
Cat c = (Cat)a; //向下转型
作业:
案例一:
已知有猫类和狗类, 他们都有姓名和年龄.
也都有吃饭的方法, 不同的是猫吃鱼, 狗吃肉.
也都会跑步, 而且仅仅是跑步.
请用继承的思想,设计出类, 并测试.
案例二:
如果有时间的话, 可以用继承的思想, 优化下咱们讲的: 黑马RPG游戏(通过玩家和NPC抽取一个父类出来)
案例三:
员工类案例:
已知某公司有项目经理和程序员两个职位,
项目经理:
属性:
姓名
工号
工资
奖金
行为:
工作
喝茶
程序员:
属性:
姓名
工号
工资
行为:
工作
请用继承的思想完成该案例.
阅读全文
0 0
- 07-面向对象特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- 面向对象的特征
- Java面向对象特征
- 面向对象的特征
- 面向对象的特征
- 06-集合
- BDCI 2017 商铺预测(回忆)
- 事务的用法
- Centos7 Linux内核编译安装过程
- CAS之 5.2x版本配置数据库认证-yellowcong
- 07-面向对象特征
- Redis常用命令之键值相关
- springmvc:Validator数据有效性验证
- HTTP协议介绍
- 08-循环
- Putty SSH密钥登录CentOS7
- 【bzoj 1823】满汉全席(2-SAT)
- 09-异常
- Python基础-定制类(str_iter_getItem_getattr_call)