java面向对象及封装说明(全):

1. 概念
面向对象:虚拟世界模拟现实生活,要保证模拟一致

面向过程:按照步骤(顺序)逐步完成

类:对同一类事务的抽象的描述,也就是:不是具体的

比如:电脑类、水杯类、人类、动物类、蔬菜类…….
对象:万物皆对象,也就是:具体的实例

比如:我的电脑、李四的水杯、张三同学………
类与对象的关系

抽象与具体的关系
描述对象的特征,称为属性,比如:价格、颜色、尺寸、品牌……

对象所做的事情或对象实现的功能,称为方法,比如:打电话、玩游戏、听歌…….

张三对象

属性:姓名、年龄、性别、身高、体重、肤色………
方法:学习、吃饭、打篮球………
李四对象

属性:姓名、年龄、性别、身高、体重、住址、学号………
方法:跑步、睡觉、说话、学习……….
将多个对象中相同的属性和方法组合在一起形成一个类

学生类

属性:姓名、年龄、性别、身高、体重
方法:学习

一、面向对象特性之封装性
1. 为什么要封装?

高内聚:类的内部数据操作细节自己完成,不允许外部干涉

低耦合:仅对外暴露少量的方法用于使用

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露岀来。这就是封装性的设计思想。

2. 应用情景
当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。
这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没其他制约条件。
但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。
这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。
比如:setName()同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private)。此时,针对于属性就体现了封装性
3. 封装具体体现
体现一:
将类的属性xxx私化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值

体现二:不对外暴露的私有的方法

体现三:单例模式(将构造器私有化)

体现四:如果不希望类在包外被调用,可以将类设置为缺省的。

4. Java中的四种权限修饰符
通过对不同的方法属性设置不同的权限修饰符来达到对类进行封装的目的。

权限从小到大顺序为:private < 缺省 < protected < public

具体的修饰范围:

修饰符    类内部    同一个包    不同包的子类    同一个工程
pubic           T               T                    T                    T
protect         T               T                   T    
缺省            T               T        
private         T            
权限修饰符说明:

修饰类:只能使用:缺省、public
类的内部结构:属性、方法、构造器、内部类
局部变量前不能放置任何访问修饰符 (private,public,和protected)。
 

二、面向对象特性之继承性
1. 继承性概述
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
Java中只允许单继承,但允许多层继承。
继承性格式:

     class         A extends     B{}
     A:子类、派生类、subclass
     B:父类、超类、基类、superclass

2. 引入继承性的好处
减少了代码的冗余,提高了代码的复用性
便于功能的扩展
为之后多态性的使用,提供了前提

3.子类继承父类后的区别
子类A继承父类B以后,子类A中就获取了父类B中声明的所有的属性和方法。特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私的结构。只因为封装性的影响,使得子类不能直接调用父类的结构而已。
子类继承父类以后,还可以声明自己特有的属性或方法:实现功能的拓展。子类和父类的关系,不同于子集和集合的关系。
关于继承的说明

一个类可以被多个子类继承。
Java中类的单继承性一个类只能有一个父类
多层继承相当于父有子,子又有孙;
子父类是相对的概念。
子类直接继承的父类,称为:直接父类。间接继承的父类称为:间接父类
子类继承父类以后,就获取了直接父类以及所间接父类中声明的属性和方法
如果定义一个类时,没有使用extends去继承一个类,则它的父类是:java.lang.Object。
我们到底在什么时候使用继承呢?继承中类之间体现的是:”is a”的关系。
如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。
4.子类对象实例化的全过程
子类继承父类以后,就获取了父类中声明的属性或方法。 创建子类的对象,在堆空间中,就会加载所父类中声明的属性。
当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所的父类的结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用。

注:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为new的子类对象。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值