面向对象

面向对象不同于面向编程,面向编程注重的每一步要写的代码,而面向编程注重的结果,面向编程可以理解为,你放学回家特别饿,然后你要自己做想吃的饭,自己洗碗….。而面向编程就是你放学回到家,告诉你的妈妈你想吃什么饭,就行了,是不是轻松多了

封装:是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的好处:
① 只能通过规定方法访问数据,安全、易用、简单、易维护。
② 隐藏类的实现细节。
③ 方便加入控制语句。
④ 方便修改实现经过封装的属性,不能直接访问,要通过公共属性get/set方法访问。

面向对象_继承
什么是继承:
后代继承先辈的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为

为什么需要继承?什么时候应该继承?
使用继承可以有效实现代码复用,避免重复代码的出现。
当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它的类继承这个父类。

重写与重载
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。

overload(重载)
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。

面向对象_多态
什么是多态?不同的对象,接收的相同的消息,产生的响应不同
多态的体现:重写和重载等。
赋值兼容规则:凡是在需要用到父类(车)对象的地方,都可以使用其共有子类(三轮车)来代替。
这里写图片描述

多态的好处
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

引用
内存单元有两个属性:值和地址
Point p1 = new Point();
Point p2 = new Point();这里写图片描述
首先实例化对象(new Point),然后定义一个引用p1指向这个实例。P1 = p2;并不是将实例p2赋值给实例p1,而是改变了引用的关系,此时p1、p2地址相同都指向了p2的这个实例。

关键字
①final
Final修饰的方法不能被重写
Final修饰的属性不能被修改(也就是常量)
Final修饰的类不能被继承
②Static静态:静态代码块是在加载类的时候自动被执行,早于构造函数,静态的方法,面向的是整个类,不是某个对象,所以没有this,并且只能使用类名来调用,不能使用实例化实例化来调用。
③This关键字
this关键字是什么意思?
有时一个方法需要引用调用它的对象。为此,java定义了this这个关键字。简单地说,
This是在对象内部指代自身的引用。可以直接引用对象,可以解决实例变量和局部变量之间发生的任何同名的冲突。

抽象类
什么是抽象类:提取事物的本质、共性的属性的方法,忽略某些不必要的细节和个性的差异。

为什么需要抽象类?
在现实生活中,有些类我们明明知道是有某些方法的,但是具体这些方法是怎么去做的好像又说不清楚,比如:手机、电报、固定电话等都是通讯通讯工具,而通讯工具就应该具有向外发送消息的方法,但是却无法说明具体怎么发,而手机、电报等我们又可以说清楚它们是怎么发送消息的。

抽象类的作用:对后代进行规则,即它的后代必须去实现父类的抽象方法。

抽象类
由于抽象类中包含有未实现的方法,所以抽象类是无法去实例化对象。

抽象方法:只有声明,没有实现。Abstract修饰抽象方法
一个类中只要有一个抽象方法那就可以说这个类是抽象类,抽象类中也可以有非抽象方法。

接口
接口里面的方法都是抽象方法,所以在接口里面声明方法时,就不需要用abstract修饰
接口的定义关键字是interface,抽象类是class,抽象类是用来继承(extends)的,接口是用来实现(implements)的。
为什么需要接口:
在java中,因为不可以去多继承,所以,只能通过单继承和多实现去解决这个问题。
为什么不能多继承?
若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承。
为什么可以多实现?
通过实现接口拓展了类的功能,若实现的多个接口中有重复的方法也没关系。这里写图片描述
这里写图片描述这里写图片描述

如果子类是抽象类则可以不需要完全去实现抽象方法, 自己要用的去实现就行了。
如果子类不是抽象类,则必须全部去实现抽象方法。

构造函数:
构造函数是在对象实例化时自动被系统调用,该函数名必须是独一无二的,是将类名作为函数名,我们还可以定义不同的有参参数列表来表示不同的构造函数 。。
无参构造函数不需要程序员去定义返回值,他是系统自动决定的,void也不行。

匿名内部类:
为什么要使用匿名内部类?
①定义接口
②定义一个类去实现接口
③定义Square这个类的一个对象,并且去使用它。
①定义接口
②定义匿名内部类,并实现接口(实际上就是将上一句情形2.3和并了)
匿名内部类的好处?
简化了流程,节省了内存。但是也使得使用者理解就更难了,代码的层次不是太清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值