--面向对象第一部分--java学习日记4(基础知识)


面向对象和面向过程

       面向对象是相对面向过程而言的,它们都是一种思想。面向过程强调的是功能行为,面向对象将功能封装进对象,强调具备了功能的对象,面向对象是基于面向过程的。

       面向对象的前提是抽象。抽象就是将现实世界中的所有事物的属性和功能抽取出来,找出共性形成基类,用来描述一类事物,是概念上的定义。真正的事物即对象是抽象的具体化,再加入自身特性的东西。对象就是该类事物的实实在在存在的个体。

       面向对象将复杂的事情简单化。

 

面向对象的三大特性:继承、封装和多态。

       继承:一个新类可以从已有的类中派生,这个过程称为类继承。新类称为派生类或子类,原始的类称为基类或父类。子类拥有父类中非私有的成员变量和成员函数,子类也可以定义与父类同名的成员。当子类定义了与父类中同名的域即变量时,子类方法中调用的是自己定义的变量,而不是继承自父类的,这称为域的隐藏,要使用父类中的对应的成员变量,需要显示的用super.变量名来获得。若子类中重定义了从父类中继承的方法,称为覆盖。

 

       封装:将过程(或称方法)和数据包装起来,隐藏对象的属性和实现细节,对数据的访问只能通过已定义的界面,这个过程就叫封装。它很好地维护了类的属性的安全,避免外部直接访问带来的错误。好处:将变化隔离,便于使用,提高重用性,提高安全性。封装的原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问。

 

       多态:可以理解为事物存在的多种体现形态。允许不同的类的对象对同一个消息作出响应。比如,父类存在的地方,其子类也必定可以存在,这正对应了面向对象设计的基本原则中的里氏代换原则。多态的体现:父类的引用指向了自己的子类对象,父类的引用也可以接收自己的子类对象。定义一个方法时,如果参数类型不确定,可以将可能的参数类型抽象出一个父类,当运行时,传入这个类的子类可动态的绑定对应的方法等。它的优点是:灵活、抽象、行为共享、代码共享。多态的弊端:虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。多态的前提:1.必须是类与类之间有关系。要么继承要么实现。2.存在覆盖。

 

        java语言中只支持单继承,及即一个类只能有一个直接父类,任何对象都继承自Object类,Object是唯一没有父类的类。由于我们在类中可能会用到多个类中的变量和方法,所以java引入了接口的概念来间接实现多继承。一个类可以实现多个接口。接口是一个特殊的抽象类。

       接口和抽象类的区别:抽象类中可以有已经实现的方法,如果继承了抽象类的子类没有实现所有的抽象方法,则这个类必须定义成抽象的。抽象类不能有抽象的静态方法,如果有final修饰的成员变量则必须初始化。接口是一系列抽象方法的集合,不能包含已经实现的方法,它的成员变量默认是public static final的,方法是public abstract的,所以实现接口的方法必须用public修饰。因为覆盖的方法不能比原来有更严格的访问权限。抽象类和接口都不能实例化对象。接口可以继承接口并且可以多继承,但不可以实现继承来的方法,因为接口只是一系列方法的定义,不能有方法体。抽象类可以实现接口。

 

 

 

一些重要的概念:

       现实对事物的描述主要包括事物的属性和行为,对应到java中就是类的成员变量(属性)和成员方法(行为)。

成员变量和局部变量的区别:

成员变量:

       1.定义在类中,在整个类中都可以被访问。

       2.成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

       3.成员变量有默认初始化值。

局部变量:

       1.局部变量只定义在局部范围内,如:函数内,语句内等。

       2.局部变量存在于栈内存中。

       3.作用的范围结束,变量空间会自动释放。

       4.局部变量没有默认初始化值。

 

内存结构

栈内存:用于存储局部变量,当数据使用完,所占用的空间会自动释放。

堆内存:数组和对象,通过new建立的示例都存放在堆内存中。

              每个实体(用来存储数据的对象)都有内存地址值。

              实体中的变量都有默认的初始化值。

              实体不再被使用时,会在不确定的时间内被GC(垃圾回收器)回收。

方法区,本地方法区,寄存器。

 

匿名对象:直接用new语句声明一个具体对象而不给它起名字,这时就是匿名对象。它的使用情况有两种:当对象方法仅进行一次调用的时候;匿名对象可以作为实际参数进行传递。

 

 构造函数    ---一种特殊的函数

        特点:1.函数名与类名相同。 2.不用定义返回值类型。 3.不可以写return语句。

        作用:给对象进行初始化。

 

this关键字

        特点:this代表其所在函数所属对象的引用,即this代表本类对象的引用。

        当在函数内部需要用到调用该函数的对象时,就用this。

 

static关键字

         作用:用于修饰成员(成员变量和成员函数)

         被static修饰后的成员具备一些特点:

                    1.随着类的加载而加载。 2.优先于对象存在。 3.被所有对象所共享。 4.可以直接被类名调用,也可以通过对象调用。

         注意事项:

                    1.静态方法只能访问静态成员。 2.静态方法中不可以写this,super关键字。 3.主函数是静态的。 4.被static修饰的成员方法不能定义成abstract的。

 

final关键字

         final可用来修饰变量、方法和类。被final修饰后的特点:变量不可变,方法不可重载,类不能被继承。

         注意的点:当用final修饰局部变量时,可以在声明时初始化,也可先声明,然后在其他地方初始化,但只能给变量赋值一次,一旦初始化值就不能再改变也不能再赋别的值。当用final修饰成员变量时,必须在声明时初始化或在构造函数中初始化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值