面向对象:
1.什么叫面向对象?
面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用
新创建的符合数据类型作为项目的基础。
面向对象是一个很抽象的概念,它相对与面向对象而言。
过程与对象都是一种解决问题的思维。
面向过程:强调的是功能行为,一种过程,先干啥,再干啥
面向对象:将功能封装到对象里,强调的是具备某功能的对象。
按照面向对象的思想,可以把任何的东西看作对象!
总结:面向过程:强调的是具体功能的实现(执行者)
面向对象:强调的是具备功能的对象(管理者)
2.类
class 是 java语言的最小编程单位,也是设计和实现java程序的基础。
类的概念
类是一组事物共有特征和功能的描述。类对于一组事物的总体描述,是按照面向对象技术进行是最小的单位,也是组成项目的最基本的模块。类的概念是抽象的。类似于建筑设计中的图纸,
是对于现实需要代表的具体内容的抽象。类只包含框架泪沟,而不包含具体的数据,所以类代表的是总体,而不是代表某个特定的个体
我的总结:类是抽象的,对象是具体的,实实在在的!
3.构造方法
构造方法:用来构造类的实例(每一个类都默认有一个无参的构造方法,得使用new调用)
字段:类或对象所包含的数据,对类状态的一种描述
方法:类或对象的特征或行为
作用:
给类中的字段进行初始化,可以用来创建对象。
特点:
方法名与类名相同
不用定义返回值类型
不需要写return语句
我的总结:
注意:
默认构造方法的特点。
多个构造犯法是以重载的形式存在的
new类就是调用类的构造方法初始化出一个对象
4.static 关键字
特点:随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用
使用注意:
静态方法只能访问静态成员
但是非静态成员可以访问静态成员
静态方法中不能使用 this super关键字
主方法 是静态的 可以利用类名去调用静态main方法,很正常!但是会陷入死循环,导致内存溢出
jvm自动停止
可修饰字段,方法
用static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例
static 修饰的字段 == 类字段
static 修饰的方法 == 类方法
没使用static修饰的字段和方法,成员属于类的单个实例
不属于类
没有static修饰的字段实例字段
没有static修饰的方法实例方法
类和实例访问字段的方法的语法:
访问类成员: 类.字段 类.方法
访问实例成员 实例点字段 实例点方法
我的总结:
static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;
没static修饰的字段和方法,是能使用实例来调用(建议使用类名来调用;因为在底层对象调用类成员,也会转换类名调用)
5.匿名对象
一个没有名字的对象,创建了一个对象出来,没有赋给一个变量;
特点:
对方法或字段只进行一次调用是;
可作为实际参数进行传递;
只在堆里面开辟存储区域
只能使用一次,使用完就被销毁了;
何时使用?只拿来用一次!!!!!!!!
new Person(); 表示匿名对象,没有名字的对象
new Persion()l.age=10; 使用过一次就销毁了
6.this 关键字
特点 : this.表示当前对象。
当前对象 《 》 当前正在调用实例成员的对象
换言之:谁调用方法,谁就是当前对象
什么时候使用this 关键字呢?
方法见的相互调用;
this.字段
构造器中相互调用,但是此时 this(【参数】)必须卸载构造方法里第一行
this 不能用在static修饰的方法里和 static修饰的代码块里
7.面向对象之封装
封装的两个含义:
1.把对象的状态和行为看成一个统一的整体,将二者放在一个独立的模块中(类)
2.“信息隐藏”,把不需要的让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段
封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不许任意调动其内部的功能方法。
程序中的一种体现:通常将类中的成员变量私有化,private 通过对提供访问方法 进行访问
boolean类型的变量没有get 只有is
8.访问修饰符
private 本类内部可以访问,不能继承到子类
default 什么都不写 , 内部可以访问,同包其他类也可以访问,同包可继承
protected 受保护的。 子类访问权限,内部可以访问,不同包的子类也可以访问,同包其他类也可以访问 ,可以继承 不同包不继承不行
public 公开的
9.类的设计分析
分析思路
根据要求写出类所包含的字段;
所有的字段都必须私有化
封装之后的字段可通过setter和getter赋值和取用
按需求添加若干构造方法
根据需求添加响应的方法;
类中的所有方法都不要直接处理 而是交给调用者去处理
10.面向对象之继承
首先有反映一般事务特性的类,然后在此基础上反映出特殊事务的类;
也就是说:继承是一种从一般到特殊的关系
特点:
1.提高了代码的复用性。
2.让类与类之间产生关系,有了这个继承关系才有了多态的特性
总结:
继承是多态的前提。
对类而言,只支持单继承。接口可以实现多继承
z子类对象在实例化之前必须首先调用父类中的构造方法之后再调用自身的构造方法
也是 父亲都没好儿子是不存在的
11.子类访问父类和方法覆写
子类不能直接访问父类的私有成员;
但是子类可以调用父类中的非私有方法来间接访问父类的私有成员
方法覆写产生原因:
当父类中某个方法不适合于子类时,子类出现和父类一模一样的方法。
判断必杀技: 子类方法前加上 @Override 能编译通过,表明是方法的覆写
调用被覆盖的父类方法: 使用 super点方法名(实参)
方法覆写是应遵循的原则(一同两小一大)
一同 方法名和参数列表相同 (方法签名相同)
两小:
子类方法的返回值类型比父类方法的返回值类型更小或相等
子类方法声明抛出的异常比父类方法申明抛出的异常更小或相等
一大:子类方法的访问权限应比父类方法更大或相等
12.super 关键字和调用 父类构造方法
表示父类对象的默认引用
如果子类要调用父类被覆盖的实例方法,可用super作为调用者调用父类被覆盖的实例方法、
调用构造方法
本类中调用一个重载构造方法用this(参数列表)
子类构造方法调用父类构造方法用super(参数列表)
子类调用父类的构造方法时:
super 必须放在第一句
java 在执行子类的构造方法前会先调用父类无参的构造方法
子类在创建对象的时候,默认调用父类的无参构造方法,要是子类构造方法中显示指定调用
父类其他构造方法,就调用指定父类的构造方法,取消调用父类无参构造方法。
13.面向对象之多态
多态:指同一个实体同时 具有多种形式
好比 你去面馆吃面 说我要吃面,那么 老板给我牛肉面,或者鸡蛋面都可以
就是说 面有多种形态, 也就是实体有多种形态
相当于动态代理的运行时环境修改
父类的引用变量可以指向子类的实例对象
实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引
用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引
用变量的类型中定义的方法。
多态的作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,
做出通用的编程,以适应需求的不断变化。
只修改方法的实现,不必修改方法的声明
继承是多态产生的前提条件;
分类:编译时多态。方法重载
运行时多态 方法重写