目录
面向对象 oo
三大特性(+抽象)
方法回顾及加深(静态方法和非静态方法)
对类,对象,方法,属性的理解
对象的创建与初始化(构造方法/构造器)
创建对象内存分析
封装
继承
objec
super
与this的类比
方法重写(区别于重载)
不能方法重写的方法:
多态
多态注意事项:
instanceof
类型转换
多态总结
抽象类
接口
普通类抽象类接口
N种内部类
面向对象 oo
1-面向过程:步骤清晰简单,一步一步往下做,适合处理简单的问题
2-面向对象:属性+方法=类,物以类聚,用分类的思维模式,首先将解决问题的方法进行分类,然后对这些分类进行独立思考,最后对每个类进行面向过程的思考,适合处理复杂的问题
ps:宏观上用面向对象的思路分析整个系统,具体到微观的类用面向过程的思路处理
面向对象编程oop的本质:以类的方式组织代码,以对象的形式组织(封装)数据
三大特性(+抽象)抽象:把对象的共同点抽取出来形成一个类
1-封装:
2-继承:
3-多态:
静态方法(有static):直接用 类名.方法名 来调用
非静态方法(无static):静态方法不能直接调用非静态方法,先将类实例化new,对象类型 对象名=对象值,再调用 对象名.方法名
static和类一起加载的(早),非静态方法在对象new实例化以后才存在(晚),所以静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
对类,对象,方法,属性的理解
什么是类?
类,是一类事物的代表 ,不如说人、桌子、树、等都是类,类有属性和方法;
什么是对象?
对象,是某个类中特别指出的一个,比如说人,人是一个类吧, 小明就是一个对象,那么小红也是啦;某个类中的一个就是对象;
什么是方法?
方法,是一个类的动态行为;
什么是属性?
属性,是一个类的静态属性;
比如人,因为人是个类,小明是类的对象; 人这个类中,可以包括的方法有: 跑步()、吃饭();
那么属性就是静态的比如是:性别,名字,年龄了;
这些方法和属性都是属于人这个类的;说一个调用方法和属性时要用,它的对象吗,所以说用
小明.跑步();
或小明.性别;
1、使用new关键字创建对象时,除了分配空间内存外,还会给创建好的对象进行默认初始化以及对类中构造方法的调用
默认初始化:数字---0 0.0 char----u0000 boolean----false 引用类型-----null
2、构造方法在创建对象的时候必须要调用,特点有
1-必须与类的名字相同
2-必须没有返回类型,也不能写void
3-构造方法作用
1-使用new关键字,本质是在调用构造方法;
2-用来初始化对象的值
4、一旦定义了有参构造,无参就必须显示定义
创建对象内存分析 封装该露的露,改藏的藏------程序追求“高内聚,低耦合”
高内聚:类内部的数据 *** 作 *** 作细节自己完成,不允许外部干涉
低耦合:仅暴露少量的方法给外部使用
封装(数据的隐藏):通常禁止直接访问一个对象中数据的实际表示,而应该通过 *** 作接口来访问,这被叫做信息隐藏
总结:属性私有,get/set
作用:
1-提高程序的安全性,保护数据
2-隐藏代码的实现细节
3-统一接口
4-增加系统的可维护性
继承的本质:对某一批类的抽象,从而实现对世界更好的建模
extends的意思是扩展。子类是父类的扩展
java中只有单继承,没有多继承(一个儿子只能有一个爸爸,一个爸爸可以有多个儿子)
继承是类和类之间的一种关系。除此之外类之间的关系还有依赖、组合、聚合
继承关系的两个类,一个是子类(派生类),一个是父类(基类)子类继承父类用extends表示
子类和父类之间,从意义上讲具有“is a”的关系
在java中,所有的类都默认直接或者间接继承object类(祖宗类)
super1、super调用父类的构造方法,必须在构造方法的第一个
2、super必须只能出现在子类的方法和构造方法中!
3、super和this不能同时调用构造方法!
1-代表的对象不同
this:本身调用者的这个对象
super:代表父类对象的应用
2-前提
this:没有继承也可以使用
super:只能在继承条件才可以使用
3-构造方法
this:本类的构造
super:父类的构造
(重写都是方法的重写,和属性无关)
重写需要有继承关系,子类重写父类的方法!
规范:
1-方法名必须相同
2-参数列表必须相同
3-修饰符:范围可以扩大,但不能缩小; public>Protected>Default>private|
4-抛出的异常:范围可以缩小,但不能扩大
一句总结:重写,子类的方法和父类必须要一致,方法体不同
为什么要重写?---父类的功能,子类不一定需要,或者不一定满足
不能方法重写的方法:1-static方法:属于类,不属于实例
2-final方法:常量,在常量池里
3-private方法:私有的
定义:同一个方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的,但是指向的引用类型有很多:父类的引用指向子类
对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!(编译看左,运行看右)
=== 理解:把子类的对象赋值给父类类型的对象
子类能调用的方法都是自己的或者继承父类的 | 父类可以指向子类,但不能调用子类独有的方法
多态注意事项:1-多态是方法的多态,属性没有多态
2-父类和子类要有联系,否则类型转换异常 ClassCastException
3-存在条件:有继承关系,子类重写父类方法,父类的引用指向子类对象 Father a= new Son();
使用: a instanceof B:判断对象a是否是类B的实例。如果是,返回true;如果不是,返回false
使用情景:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就向下转型;如果返回false,不进行向下转型
类型转换高转低强制转换,低转高自动转换(父类:高 , 子类:低)
子类转换为父类,可能丢失自己本来的一些方法
多态总结1、存在条件:父类的引用指向子类的对象
2、把子类转换为父类:向上转型,直接转换
3、把父类转换成子类:向下转型,强制转换---可能丢失一些方法:类比基本数据类型的丢失精度
4、方便方法的调用,减少重复的代码,使代码简洁---类比基本数据类型为了方便计算
核心思想:抽象的编程思想 (包括封装、继承、多态都是)
抽象类抽象类:一个类中没有包含足够的信息来描述一个具体的对象,这个类就是抽象类
抽象方法:只有方法名字,没有方法的实现
本质:抽象的抽象(类就是抽象,抽象类就是抽象的抽象)
格式:abstract{ }
使用原则:
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
(2)不能new这个抽象类,只能靠子类去实现它:约束
(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
(4)子类(如果不是抽象类)则对抽象类全部的抽象方法进行重写实现,(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);
作用:用来继承、约束、规范、扩展
接口 普通类抽象类接口普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范,自己无法写方法-------专业的约束(抽象),作用是约束和实现分离
接口本质:接口的本质是契约,就像法律一样,制定好后大家都遵守
OO(面向对象)的精髓,是对对象的抽象,最能体现这一点的就是接口
声明类的关键字是class,声明接口的关键字是interface
官方解释:接口是一系列方法的声明是一些方法特征的集合
接口中只有一些方法的特征,没有方法的实现-----抽象方法
因此这些方法可以在不同的地方被不同的实现,这些实现具有不同的行为功能
目的:接口是为了解决java中无法实现多继承的一种手段
在实际开发中更多的作用是制定标准或规范方法
作用:
1-约束
2-定义一些方法,让不同的人实现
3-public abstract 方法
4-public static final 常量
5-接口不能被实例化------因为接口中没有构造方法
6-用implement可以实现多个接口
7-实现接口必须要重写接口中的方法
内部类就是在一个类的内部再定义一个类,比如,A中定义了一个B类,那么B类相对于A类来说就称为内部类,而A类相对于B类来说就是外部类了
1、成员内部类
2、静态内部类
3、局部内部类
4、匿名内部类
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)