面向对象理解

面向对象:#

类是对象的模板,对象是类的实例。
通俗讲就是根据类可以细分多个对象,譬如动物模板下有猫、狗、鱼。。。的对象;每个对象又单独作为类,该类下又定义多个实例变量,譬如狗有姓名、年龄、性别。。。等属性;该类定义的方法称为实例方法用以表示行为动作等,譬如狗吃、跑、玩。。。
定义在方法外的变量称为成员变量、内部为局部变量,成员变量与局部变量重名时局部优先,可以this.变量名调用成员变量

方法重载:
简单说就是改变方法的参数列表来扩充方法,注意方法名不能变,重载后原方法依然可以正常使用

构造方法:
用于给对象类的实例变量初始化,类加载时同时加载构造,默认提供无参数的,但是你重载了构造方法就不提供默认的,所以最好自己写一个无参构造;
写法:方法名与类名相同,不写返回值类型,构造方法也是方法所以可以重载,注意变量的作用范围
如构造方法私有化,则表示不可以创建对象

自定义类型:
在创建类的同时创建了类型,类名即类型名;可以进行声明赋值调用等操作。也可通过多次==.==的形式调用直至找到属性或方法

面向对象的特性:####

封装:
尽可能隐藏对象的细节、控制修改及访问权限,一般属性私有化,方法公开化;建议对象类都进行封装。
private:私有的近本类可见
public :公开的(暂时来看没有限制均可调用)
default:不写默认提供的,最大范围限定在同包内
protected:受保护的,最大范围限定在同包或不同包的子类
get/set方法:
因私有属性不同类不可见,可以通过给私有属性添加get、set方法从而达到间接修改;
写法: 顾名思义get取有返回值无参数,set存有参数无返回值

继承:
按照面向对象的定义看,就是模板与对象的关系:模板即是继承关系的父类,也叫超类;对象即是继承关系的子类;
子类继承父类的全部非私有属性、非构造方法、非跨包proteced修饰的属性和方法
具体方法:
抽取子类的共有属性、行为定义再父类中,通过继承关系实现减少多个子类重复的代码
创建流程:
先继承后叠加
调用流程:
先属性后方法,先父类后子类,如有重写优先执行重写后方法

方法重写:
用于继承关系的子类中,与父类相同的返回值类型、方法名、参数列表,修饰词范围相等或更宽泛;简单来说就是只改方法体内容,重写是覆盖,子类中不会保留原方法

方法遮蔽
继承关系时父子类属性或方法同名,可用super区分调用,重名不是覆盖

多态:

	不同视角下的同一事物,关注的点也不同;看到的范围不同,能得到的信息也不同。
	表现形式为父类引用指向子类引用,表示将子类当成父类看,降低关联程度

装箱/拆箱:
顾名思义,父类指向子类表示将子类装箱;要将子类拆箱需要强转,强转前需确认类型。

instanceof
用于拆箱前判断真实类型;
语法:if(父类引用 instanceof 子类引用){强转}

** 用法:**
用作参数:子类多次做参数时减少重载次数;
用作返回值类型:不确定返回的是哪个子类时

抽象
生活中不存在的实例

abstract
修饰类表示抽象类,不应独立存在而被创建出的类, 抽象类无法new对象,通常用于当做父类被继承。
修饰方法表示抽象方法,没有方法体,必须在抽象内中,且继承后必须被重写;

静态
储存在方法区表类与类之间的关系,加载类时加载静态属性、构造,静态方法需调用
静态即全类共享,仅此一份,一方修改影响另一方;方法可以被继承,方法引用仅可调父类或子类重写方法,不能访问非静态实例。
调用方法:直接通过类名.静态名调用

代码块
代码块分为:动态代码块 { }、静态代码块 static{ } 两种
位于构造前属性后,用于给程序运行添加必要的初始化属性,区别动态没声明一次加载一次,静态只有类加载时加载一次。也就是用来配合构造方法、优化构造方法的。

final
最终的,修饰类表示最终类,不能被继承,防止被修改。
修饰方法表示最终方法,不能被重写。
修饰变量表示常量,字母大写,使用前必须初始化,
引用类型的地址不可改变,但属性可以改变

接口
概念:微观上表示行为和约定,规定了类必须实现的行为;宏观上作为标准降低事物的耦合度,因其关注点是行为和能力,所以比继承更自然。
接口与抽象类相似,区别在于接口的标准只能实现无法更改,约束效果更强,同样无法创建对象,实现时必须被覆盖,否则依然是抽象方法由其子类覆盖
约定:通过技术手段达到的约束
常见接口关系:
类与类,类与接口:单继承多实现
接口与接口:多继承多实现
接口的实现:implements
在实现方方法体前加 implements 接口名 来实现接口,可多次添加以实现多个接口
声明调用:
仅可调用本接口内方法,也可强转为现实类调用,强转前需判断类型
接口用法:
常量接口:
将适量个数表示固定值或状态的常量定义在同一接口内
行为、能力扩充:
在接口内约定行为或能力,由实现类去实现
降低耦合度,制定标准:
用于
参照现实分离使用者和实现者
,由实现方实现具体方法,先定标准再找使用者
接口回调:
先有使用方后有实现方
使用方先调用接口作为工具,实现方实现具体方法用于补充完善工具,最后谁调用工具谁给传具体参数
接口好处:
降低程序的耦合度 (分离使用方与实现方)
更自然使用工具 (接口关注行为、能力)
实际与实现完美分离 (回调)
设计上更容易搭建、更换实现
内部类:
在类内嵌套一个类,共四种:成员、静态、局部、匿名,会生成源文件
成员:
依托外部类,与实例同级,可调用外部类属性方法不破坏封装,为外部类提供组件
静态:
不依赖外部类,可直接声明创建
局部:
封装类,定义在方法中,隐藏类的信息,限制类的范围
作用范围和创建对象仅限于方法内,访问外部变量默认为常量,用于保障变量回收生命周期
用法:
内部类先实现后调用,调用时传参数
匿名:
没有类名的局部内部类,只能创建一个对象,定义、实现、创建语法的合并
用法:
直接调用,参数内声明接口并直接添加{}完成实现细节

Object####
		任何类都有一个Object的超类

getClass()
返回全限定名+类型,用于判断类型
hashCode()
返回getClass()@加int型十进制哈希码地址,
toString()
返回getClass()@加十六进制哈希码地址
重写方法可返回带变量名的字符串
eauqls()
返回boolean类型
用于比较哈希码地址是否相等(==表示比较哈希码是否相同)
可重写方法用于判断引用类型的内容是否相等,
重写步骤:判断地址是否相同、判断参数是否为空、getClass()判断类型、equals判断属性是否相等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值