面向对象封装与继承

Posted 横扫天下IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象封装与继承相关的知识,希望对你有一定的参考价值。

面向对象:
    (1)面向过程 强调过程,执行者:它是一种更符合人们思考习惯的思想;
    (2)面向对象 强调对象,指挥者:它使复杂的内容简单化;
    (3)面向对象思想的特点:它使我们从执行者变成了指挥;
        面向对象方法的主要优点是:符合人们通常的思维方式;从分析到设计再到编码采用一致的模型表示,具有高度连续性;软件重用性好。
 
技术分享图片
 
面向对象的写法:
技术分享图片
初始化对象
技术分享图片
面向对象的特点:
    封装;继承;多态
 
封装,有参构造方法。
技术分享图片
 
技术分享图片
无参构造方法
技术分享图片
 
技术分享图片
 
类和对象:
    对于同一类事物可以抽取它们的共性的内容,定义在类中。如生活中的汽车,每一台车都有轮胎数和颜色。那么在通过java描述汽车这类事物时,就可以将这两个共性属性作为类中的属性进行定义。通过该类建立的每一个汽车实体都具有该属性,并可以有对象特有的属性值。
    (1)类对现实世界中事物的描述(成员变量和方法);
    (2)对象 现实世界中实际存在具体的个体;
    (3)对象的使用以及内存图。
 
成员变量与局部变量的区别:
    1.作用域:
        成员变量的作用域是整个类中都可以访问;
        局部变量是的作用域是定义它的方法内,方法弹栈,它就消失;
    2.初始值:
        局部变量使用前必须手动赋值;系统不会赋默认值;
        成员变量系统会赋初始值,Sting-->null,int--0,double--0.0,boolean-->false,char-->‘\u0000‘;
    3.所在内存区域:
        局部变量在方法运行的栈帧里,在栈里,会自动释放;
        成员变量在对象里,对象在堆里,成员变量也在堆里,不使用的对象会被垃圾回收机制在不确定的时候回收。
 
局部变量和成员变量:
    (1)作用范围 
        局部变量:方法内public void method(String name) {};
        成员变量:类中,对整个类有效{成员变量分为两种一种静态的,一种非静态的};
    (2)存储空间
        局部变量:栈内存
        成员变量:堆内存{静态的成员变量在方法区,非静态的在对象中在堆内存中}
    (3)初始化值
        局部变量:在使用前必须手动给值
        成员变量:jvm默认初始化值。
技术分享图片
 
成员变量
技术分享图片
 
封装:
    (1)封装的好处:便于重复使用,安全性高。
    (2)private(私有的)权限修饰符
封装的访问修饰符:
1、private(私有的)--》访问我,除了当前类中可以访问的到,其他类必须通过方法。
2、protected(受保护的)
3、public(公共的)
4、默认的,也就是没有访问修饰符。
位置
private
默认的
protected
public
同一个类
同一个包内的类
不同包内的子类
不同包并且不是子类
 
private(私有):
    private修饰成员变量和成员方法后,它们都不能在其他类直接访问,成员变量要通过公开的setget方法访问,成员方法私有表示这个方法是给本类自己方法用的。
    注意:私有仅仅是封装的一种体现形式而已。封装不仅仅只有private一种方式,比如protected也可以实现封装。
 
技术分享图片
 
技术分享图片
构造函数:
    (1)用途:用于给对象中属性进行初始化。
        A:格式类名(){code}Person(){}
        B:Person(){}public Person(){}
    (2)特点 你不定义空参数的构造函数,系统会自动给一个空参构造,你定义了构造函数无论是有参还空参的,系统就不再给空参数的了。
    (3)重载构造函数,是根据参数列表来区分是哪个构造函数。
        注意:构造函数细节:如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。如果我们手动定义了一个构造函数,系统就不会再给默认构造函数。所以建议大家;在给类添加带参数的构造函数的同时,将无参的也加上。
 
具体什么时候使用构造函数:
1、当我自定义对象,需要使用不定变量,或者用户输入的数据,我这个时候需要从当前类中传递给我自定义对象的时候,需要使用到有参构造函数进行传递。
2、当我什么时候用空参构造函数:当我需要使用自定义对象去帮我操作一些工作,刷新当前页面所有数据。
或者我现在要初始化一些插件或者动画,或者其他的操作。
技术分享图片
 
this关键字:
    每个对象都有一个指向自己的指针,就this。
 
this的作用:
    1.在方法中区分成员变量和局部变量.this.成员变量;
    2.this语句可以在构造函数里调用其他构造函数;
    3.在一个方法中,this可以调用本类的其他方法,当然也可以省略:
        (1)代表当前对象的引用。使用的时候,谁调用方法,this就代表谁。
        (2)什么时候使用this呢?
            A:当局部变量和成员变量重名的时候,可以用this进行区分。
            B:this调用成员方法
            C:构造函数中使用this
                注意:this() 必须放在第一行。
技术分享图片
 
创建对象在内存中的详细步骤:
    1.主函数进栈,给类类型变量c分配空间
    2.在堆内存中开辟空间,分配内存地址
    3.在堆内存中建立对象特有属性,并进行默认初始化
    4.对属性进行显示初始化
    5.将内存地址赋给栈内存中的c变量
 
总结:
    初始化块就是构造器的补充,其实就是提炼各个构造函数中通用的初始化行为,将它们放到初始化块中,这样,可以只写一次,不用每个构函都写一遍,它会自动保证在构函之前执行。初始化块和构函相关联构函执行一次,初始化块也执行一次。
 
 
对象内中的方法:
1、构造方法:随着类加载而执行,只执行一次,就是类初始化时随着执行。
2、自定义方法:自定义方法,如果创建后,没有对象调用则不执行,必须通过对象调用才能进行执行操作。
3、当前类中方法,你可以直接使用方法名进行执行,因为在当前对象中,没有其他对象能够引用,只需要写上方法名在主入口方法中即可。
4、静态代码,通过关键字static加上大括号进行创建。优先级最高,不受代码执行的步骤所影响。
总结:静态方法(优先级最高) > 构造方法 > 自定义方法;
 
继承:(extends )
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类基类。子类可以直接访问父类中的非私有的属性和行为。通过 extends 关键字让类与类之间产生继承关系。格式:class 猫 extends 动物{}
注意:
1、一个父类可以有多个子类。
2、一个子类不能有多个父类。
3、object(任何类都起源于他):他是所有类的默认父亲,如果当前类没有继承,那么系统自动默认继承object
4、后期再学习使用过程,看见范围值结果为object或者obj类型,那么就是返回为对象的意思。
 
父类
技术分享图片
子类
技术分享图片
运行测试类:
技术分享图片
 
今天作业:
1、大象与冰箱的故事。
2、完善今天动物类的创建与方法的使用:
1、通过Scanner,进行选择与动物玩耍、吃饭、睡觉、看病。
2、每次创建对象,需要显示对象的:疲劳度、饥饿度、健康值;
3、通过选择给动物吃饭,睡觉到一定值后,动物无法进行吃饭与睡觉,必须先消耗,再操作,并提醒用户。
4、必须循环操作。

以上是关于面向对象封装与继承的主要内容,如果未能解决你的问题,请参考以下文章

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

面向对象编程三大特性-封装、继承、多态

JAVA面向对象,继承、封装、多态

面向对象基本特征:封装与继承

Python面向对象之类的封装继承与多态

面向对象之继承封装与多态