面向对象知识点复习

面向对象知识点复习


1.面向对象概述:

1.1面向过程(POP) 与面向对象(OOP)
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为小单位,考虑怎么做。面向对象,是一种基于对象的编程思维,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做,本质上是特定数据绑定特定行为。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。

1.2两者优缺点:

面向过程

​ 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

​ 缺点:没有面向对象易维护、易复用、易扩展

面向对象

​ 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

​ 缺点:性能比面向过程低

1.3面向对象的三大特征:
-----封装 (Encapsulation)
-----继承 (Inheritance)
-----多态 (Polymorphism)

1.4五大基本原则:
单一职责原则SRP(Single Responsibility Principle)
是指一个类的功能要单一,不能包罗万象。如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来。

开放封闭原则OCP(Open-Close Principle)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。

替换原则(the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

依赖原则(the Dependency Inversion Principle DIP)

具体依赖抽象,上层依赖下层。假设B是较A低的模块,但B需要使用到A的功能,这个时候,B不应当直接使用A中的具体类: 而应当由B定义一抽象接口,并由A来实现这个抽象接口,B只使用这个抽象接口:这样就达到了依赖倒置的目的,B也解除了对A的依赖,反过来是A依赖于B定义的抽象接口。通过上层模块难以避免依赖下层模块,假如B也直接依赖A的实现,那么就可能造成循环依赖。一个常见的问题就是编译A模块时需要直接包含到B模块的cpp文件,而编译B时同样要直接包含到A的cpp文件。

接口分离原则(the Interface Segregation Principle ISP)
模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来


2.学习面向对象的三条主线

1.Java类及类的成员(A)
2.面向对象的三大特征(B)
3.关键字©

4.其他(D)


3.学习过程
(上)
3.1(A)类与对象:

1.类的定义

修饰符 class 类名 {

属性声明;

方法声明;

}

说明:修饰符public:类可以被任意访问 类的正文要用{ }括起来

public class Person{
   
	private int age ; //声明私有变量 age
	public void showAge(int i) {
    //声明方法showAge( )
	age = i;
   }
}

2.对象的创建和使用

创建对象语法: 类名 对象名 = new 类名();

使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

举例:
public class Zoo{
   
	public static void main(String args[]){
   
//创建对象
		Animal xb=new Animal();
		xb.legs=4;//访问属性
		System.out.println(xb.legs);
		xb.eat();//访问方法
		xb.move();//访问方法
	}
}

3.对象的生命周期(内存解析)

在这里插入图片描述

3.2(A)属性和方法:

(Field = 属性 = 成员变量,Method = (成员)方法 = 函数)

1.属性:

成员变量的局部变量

1)区别:

在这里插入图片描述

在这里插入图片描述

2)内存位置

成员变量:堆空间或静态域内

局部变量:栈空间

3)初始化赋值

成员变量才有初始化赋值:

基本数据类型:0 (boolean类型:false)

引用数据类型:null

局部变量没有初始化值

局部变量定义后,必须初始化,即赋值,才能使用。

2.方法:

1)方法的声明

方法的声明格式: 修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){

方法体程序代码

return 返回值;

public class Person{
   
	private int age;
	public int getAge() {
    //声明方法getAge()
		return age;
	}
	public void setAge(int i) {
    //声明方法setAge
		age = i; //将参数i的值赋给类的成员变量age
	}
}

其中: 修饰符:public,缺省,private, protected等 返回值类型:

没有返回值:void。

有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用 方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意” 形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开 返回值:方法在执行完毕后返还给调用它的程序的数据。

2)方法的分类

在这里插入图片描述

3)方法的重载(overload)

重载的概念 :在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。

重载的特点: 与返回值类型无关,只看参数列表,且参数列表必须不同。调用时,根据方法参数列表的不同来区别。

参数列表:
参数个数

​ 参数数据类型

​ 参数多类型数据顺序不同

4)可变形参的方法

JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定 义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。

//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量

public static void test(int a ,String[] books);

//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量

public static void test(int a ,String…books);

5)值传递机制

Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。

形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

6)递归方法

3.3(A)对象数组

对象数组的内存解析

在这里插入图片描述

3.4(B)三大特性之一:封装

1)封装与隐藏

我们程序设计追求“高内聚,低耦合”。

高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;

低耦合 :仅对外暴露少量的方法用于使用。

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提 高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露 的暴露出来。这就是封装性的设计思想。

Java中通过将数据声明为私有的(private),再提供公共的(public) 方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:

隐藏一个类中不需要对外提供的实现细节;

使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑, 限制对属性的不合理操作;

便于修改,增强代码的可维护性;

使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
问题:xb.legs = -1000;
应该将legs属性保护起来,
防止乱用。
保护的方式:信息隐藏
class Animal {
   
	public int legs;
	public void eat(){
   
		System.out.println("Eating");
	}
	public void move(){
   
		System.out.println("Moving.");
	}
}
public class Zoo {
   
	public static void main(String args[]) {
   
		Animal xb = new Animal();
		xb.legs = 4;
		System.out.println(xb.legs);
		xb.eat();
		xb.move();
	}
}

2)四个权限修饰符

在这里插入图片描述

3.5(A)构造器

1)构造器的特征和作用

构造器的特征:

①它具有与类相同的名称

②它不声明返回值类型。(与声明为void不同)

③不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值

构造器的作用:创建对象;给对象进行初始化

如:Order o = new Order(); Person p = new Person(“Peter”,15);

如同我们规定每个“人”一出生就必须先洗澡,我们就可以在“人”的 构造器中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自 动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们 要“洗澡”了。

public class Animal {
   
	private int legs;
	// 构造器
	public 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值