Java面向对象编程思想

一、java编程思想 面向对象封装
面向对象思想特点
1.是一种更符合人们思考习惯的思想
2.把复杂的事情简单化
3.把人们从执行者变成指挥官。

面向对象的程序开发
就是不断的找对象,使用对象,指挥对象做事情的过程。
没有对象?创建(new)一个!

面向对象思想特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)

面向对象思想:
就是把关注点放在一件事或一个活动中涉及到的人或事物(也就是对象)上的思想(或思维方式)
需要洗的衣服>交给洗衣店清洗

面向过程思想:
面向过程思想就是把关注点放在一件事或一个活动中涉及到的步骤(也就是过程)上的思想(或思维方式)
比如:洗衣服
需要洗的衣服>找个桶接水>把衣服放进桶里>再放入洗衣粉>洗衣服>晾晒衣服

类与对象
java中通过"类"来描述事物,类主要由属性和行为构成。

类的概念
即归类、分类,是一系列具有相同属性和行为的事物的统称
例如:人类
 属性:名称,年龄,性别…
 行为:吃饭、睡觉、打代码…

抽象
把一系列相关事物共同的属性和行为提取出来的过程

什么是对象?
某个类事物的某个具体存在

类和对象的关系
类:属性和行为的集合,是一个抽象概念
对象:是该类事物的具体表现,是一种具体存在
例如:
 手机       类
 手中的华为手机  对象

如何定义一个类?
定义类的过程,就是把一系列相关事物共同的属性和行为抽取出来的过程
事物的属性,在类中叫成员变量
事物的行为,在类中叫成员方法

如何创建一个对象?
类名 对象名 = new 类名();

如何使用一个对象?
对象名.变量名
对象名.方法名()

变量规则
1、局部变量
定义位置:方法的参数列表或者方法体语句(方法内部)
初始化值:无初始化值,必须先赋值再使用
作用范围:在方法中
2、成员变量
定义位置:类中、方法外
初始化值:有默认初始化值
作用范围:在类中

使用变量的规则:
 使用变量遵循"就近原则",如果局部位置有,就使用,
 没有就去本类的成员位置找,有就用没有就报错

二、java编程思想 面向对象封装
封装的概念:
将一系列相关事物共同的属性和行为提取出来,放到一个类中,隐藏对象的属性和实现细节,仅对外提供公共的访问方式。

封装方法
安全性:调用者不知道方法的具体实现
复用性:方法可以被重复使用
简单化:将繁多的代码以一个方法的方式呈现,仅通过调用方法就可以实现功能;代码维护也变得简单。

封装的关键
绝对不能让类中的方法直接访问其他类的属性(数据),程序仅通过对象的方法与对象的数据进行交互。

封装类
安全性:调用者不知道类的具体实现
复用性:类的对象可以被重复使用
简单化:类的对象包含了更多的功能,使用起来也更方便

private关键字
private的基本概念
私有的,一种访问权限修饰符,用来修饰类的成员
特点被修饰的成员只能在本类中访问

用法
private 数据类型 变量名;
private 返回值类型 方法名(参数列表){}

this关键字
this的基本概念
这,这个,表示本类对象的引用,本质是一个对象

特点
每个普通方法都有一个this,谁调用该方法,this就指向谁。

用法
this.属性名;
this.方法名(参数);

标准代码:JavaBean
Java语言编写类的标准规范。符合JavaBean标准的类,必须是具体的,公共的,并且具有无参数的构造方法,提供用来操作成员变量的set和get方法。

构造方法的基本概念
构造、创建、也叫构造器,用来帮助创建对象的方法,准确的说,构造方法的作用是初始化对象。

谁来创建对象?
new关键字,java中通过new关键字创建对象,并在内存中开辟空间,然后使用构造方法(构造器)完成对象的初始化工作。

构造方法的定义
格式
修饰符 构造方法名(参数列表){
 方法体;
}
使用构造方法的要求
方法名必须与类名相同
没有返回值
没有返回值类型
若为提供任何构造方法,系统会给出默认无参构造
若以提供构造方法,系统则不再提供无参构造
构造方法可以重载

三、java编程思想 面向对象继承
继承的概念
泛指把前人的作风、文化、知识、财产等接受过来

Java中的继承
让类与类之间产生父子关系
 被继承的类叫做父类(基类,超类)
 继承的类叫做子类(派生类)

子类继承父类,子类就拥有了父类的非私有成员(成员变量、成员方法)

父类:
public class superclass {
//属性私有化
private String name;
private int age;
//get和set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

子类
public class subclass extends superclass{ //extends继承

}
//测试类
public class Test {
public static void main(String[] args) {
subclass s = new subclass();
s.setName(“张三”);
System.out.println(s.getName());
}
}

继承使用场景
多个类中存在相同的属性和行为时,可以将这些内容提取出来放到一个新类中,让这些类和新类产生继承关系,实现代码重复。

继承的优缺点
优点:
1、功能重复利用
直接将已有的属性和行为继承过来,实现了功能的复用,节省了大量的工作
2、使于扩展新功能
在已有功能的基础上,更容易建立、扩展新功能
3、结构清晰,简化认识
同属于一个继承体系的相关类,他们之间结构层次清晰,简化了人们对代码结构的认识
4、易于维护
不同类之间的继承关系,让这些事物之间保持一定程度的一致性,大大降低了维护成本。

缺点:
1、打破了封装性
父类向子类暴露了实现细节,打破了父类对象的封装性
2、高耦合性
类与类之间紧密的结合在一起,相互依赖性高

程序设计的追求
低耦合,高内聚
耦合:两个(或更多)模块相互依赖于对方
内聚:模块内部结构紧密,独立性强

继承关系中成员变量使用结论
查找变量的原则:就近原则
查找变量的顺序:局部>成员>父类>更高的父类>object
访问父类变量的方式:super.父类变量名;
super:当前对象父类的引用(父类内存空间的标识)
对象初始化顺序:先初始化父类内容,再初始化子类内容

this和super的区别
this本质:对象
从本类开始找

super本质:父类内存空间的标识
从父类开始找

方法重写(Override)
定义:
 子类中出现父类方法定义相同的方法的体现
解释:
 方法重写也叫方法的复写、覆盖
 方法名、参数列表、返回值类型都相同
注意事项:
 父类私有方法无法重写
 子类方法访问权限不能小于父类方法
 子类不能比父类方法抛出更大的异常
使用场景:
 扩展父类功能
 父类功能过时,重新实现父类功能

java访问修饰符
private  默认 protected  public
本类   本类  本类  本类
     本包  本包  本包
         子类  子类
             其他类

方法重载和方法重写的区别
重载(Overload)
方法名相同
参数列表不同(个数或对应位置类型)
和返回值类型无关
和修饰符无关
定义位置:同一个类

重写(Override):
方法名相同
参数列表相同
返回值类型相同
修饰符访问权限不小于被重写方法
定义位置:子父类中

java继承的特点
单继承
 java只支持类的单继承,但是支持多层(重)继承
 案例:
 public class fruit{} 水果类
 public class apple extends fruit{} 苹果类继承水果类
 public class fuji extends apple{} 红富士苹果类继承苹果类

java支持接口的多继承
 语法:
 接口A extends 接口B、接口C、接口N…

私有成员不能继承
 只能继承父类的非私有成员(成员变量、成员方法)

构造方法不能继承
 构造方法用于初始化本类对象。
 创建子类对象时,需要调用父类构造初始化该对象的父类内容,若父类构造可以被继承,该操作会造成调用的混乱。

继承体现了"is a"的关系
 子类符合"is a(是一个)"父类的情况下,才使用继承,其他情况不建议使用

四、java编程思想 面向对象多态
什么是多态?
多种状态,同一对象在不同情况下表现出不同的状态或行为

Java中实现多态的步骤
1、要有继承(或实现)关系
2、要有方法重写
3、父类引用指向子类对象(is a 关系)

多态的好处
1、可维护性:基于继承关系,只需要维护父类代码,提高了代码的复用性,大大降低了维护程序的工作量。
2、可扩展性:把不同的子类对象都当作父类看待,屏蔽了不同子类对象间的差异,做出通用的代码,以适应不同的需求,实现了向后兼容。

多态的弊端
不能使用子类特有成员
如需使用需要用到类型转换

类型转换
当需要使用子类特有功能时,需要进行类型转换
1、向上转型(自动类型转换)
 子类型转成父类型
 父类 sc = new 子类();
2、向下转型(强制类型转换)
 父类转型成子类型
 子类 sc = (子类)父类;

注意事项
只能在使用继承层次内进行转换(ClassCastException)
将父类对象转换成子类之前,使用insetanceof进行检查

抽象类的概念
包含抽象方法的类,用abstract修饰

抽象方法的概念
只有方法声明,没有方法体的方法。用abstract修饰

抽象方法的由来
当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类

抽象类的特点
1、修饰符
必须用abstract关键字修饰
修饰符abstract class 类名{}
修饰符abstract 返回类型 方法名{}
2、抽象类不能被实例化,只能创建子类对象
3、抽象类子类的两个选择
 重写父类所有抽象方法
 定义成抽象类

抽象类成员的特点
1、成员变量
可以有普通的成员变量
也可以有成员常量(final)
2、成员方法
可以有普通方法,也可以有抽象方法
抽象类不一定有抽象方法,但有抽象的类一定是抽象类(或接口)
3、构造方法
像普通类一样有构造方法,且可以重载

final关键字
最终的,最后的

final的作用
用于修饰类、方法和变量
修饰变量:最终变量,即常量,只能赋值一次
不建议修饰引用类型数据,因为仍然可以通过引用修改对象的内部数据,意义不大。

static关键字
静态的

static的作用
用于修饰类的成员
成员变量:类变量
成员方法:类方法

调用方式
类名,成员变量名;
类名,成员方法名(参数);

static修饰成员方法
静态方法:静态方法中没有对象this,所以不能访问非静态成员
静态方法的使用场景
 只需要访问静态成员
不需要访问对象状态,所需参数都由参数列表显示提供

接口的概述
接口技术用于描述类具有什么功能,但并不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则、标准。

接口的定义
1、定义接口使用关键字interface
 interface 接口名{}
2、类和接口是实现关系,用implements表示
 class 类名  implements 接口名

接口的特点
接口创建对象的特点
1、接口不能实例化
通过多态的方式实例化子类对象
2、接口的子类(实现类)
 可以是抽象类,也可以是普通类

接口继承关系的特点
1、接口与接口之间的关系
 继承关系,可以多继承。
格式: 接口 extends 接口1,接口2,接口n…
2、继承和实现的区别
 继承体现的是“is a”的关系,父类中定义共性内容
 实现体现的是“like a”的关系,接口中定义扩展功能

接口成员变量的特点
1、接口没有成员变量,只有公有的,静态的常量
 public static final 常量名 = 常量值;

接口成员方法的特点
1、成员方法
JDK7及以前,公有的、抽象方法
public abstract 返回值类型 方法名();
JDK8后,可以有默认方法和静态方法
public default 返回值类型 方法名(){}
static 返回值类型 方法名(){}
JDK9以后,可以有私有方法
private 返回值类型 方法名(){}

接口构造方法的特点
1、构造方法
 接口不能实例化,也没有需要初始化的成员,所以接口没有构造方法

本人小白,本文为个人总结资料。
文章如有问题请大神指出,如有看不懂的地方可以评论私信交流。欢迎大家讨论交流。
本章对大家有帮助的话可以点点赞加个关注。

你可能感兴趣的:(Java面向对象编程思想)