栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java基础】理解面向对象OOP

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java基础】理解面向对象OOP

文章目录
  • 前言
  • 一、面向过程与面向对象
  • 二、类与对象
  • 三、创建对象
  • 四、面向对象三大特性
  • 五、对象创建的顺序
  • 总结


前言

Java是一门面向对象的语言,而我们学过的C语言是一门面向过程的语言,那么如何理解面向过程,又如何理解面向对象?让我们来一探究竟!。


一、面向过程与面向对象
  • 面向过程:是一种以过程为中心的编程思想,解决问题的方式是先分析待解决的问题步骤,用函数将这些步骤一步步实现,使用的时候再依次调用,强调的是过程。

  • 面向对象:是相对于面向过程来讲的,以对象为中心的编程思想。解决问题的方式是将问题分解成各个对象去完成,通过操作对象来完成,不用关心该对象具体是如何实现这个功能的。将功能封装进对象,强调具备了功能的对象。

  • 例子:你在写代码的时候突然肚子饿了,想吃番茄炒蛋。你有两个选择,一是自己动手做,先买番茄和鸡蛋,洗番茄,切番茄,打蛋,起锅烧油,等等,最后出锅开始吃;二是去饭店直接说:老板一份番茄炒蛋,然后上菜开吃。方案一就是面向过程,方案二就是面向对象。

  • 两者的优缺点对比
    面向过程优点:性能比面向对象好,不需要实例化,减少开销。
    面向过程缺点:不易维护,不易复用,不易扩展。
    面向对象优点:低耦合,易维护,易复用,易扩展。
    面向对象缺点:性能不如面向对象。

  • 本质
    面向对象的底层还是面向过程,只不过是将面向过程抽象成了类,将实现的步骤进行了封装。让复杂的问题简单化,我们不需要了解具体的实现过程,只要使用对象去帮我们完成即可。面向对象的过程就是找对象,创建对象,使用对象,维护对象。

二、类与对象

我们已经知道了面向对象是以对象为中心的,那么对象是由类实例化出来的。二者的关系如何,我们继续分析。
类是对现实生活中事物的一种描述,可以把它理解为一张设计图,规定了如何创建对象,对象的行为(类中的方法)和属性(类中的成员变量)是什么。由类构造对象的过程称为实例化。
对象就是类的一个个具体实例。
举个例子:
类就相当于是一个活字印刷的模具,模板,对象就相当于通过这个模具造出来的一个个字。通过这个模具可以造出多个对象。
对象的三个特性:

  • 对象的行为:可以对对象施加哪些操作,方法。
  • 对象的状态:当施加方法时对象如何回应。
  • 对象标识:如何辨别具有相同行为与状态的不同对象。

类的构造方法
构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,构造方法分为有参构造方法和无参构造方法。构造方法没有返回值。

public class Example{
	public Example(){
		System.out.println("无参构造");
	}
	public Example(String name)(
		System.out.println("有参构造"+name);
	}
}

成员变量与静态变量
对象的属性称为成员变量,是指定义在类中的变量。静态变量由static修饰,是属于类的。既可以通过类名调用(类名.静态类成员)也可以通过对象调用。

public class A{
	private int id; //成员变量
	private String str;//成员变量
	
	private static int i=0;//静态变量
}

成员方法与局部变量
成员方法对应类的行为,局部变量是指方法中定义的变量。局部变量是在方法执行时创建,在方法执行结束时被销毁,使用时必须赋值或初始化。所以局部变量的有效范围从该变量的声明开始到该变量的结束为止。

public class A{
	private int id; //成员变量
	private String str;//成员变量
	
	private static int i=0;//静态变量
	public void test(){
		String s="abc";//局部变量
		System.out.println("成员方法");
	}
}

静态方法
静态方法只能访问静态成员(成员变量和方法),非静态方法既可以访问静态成员也可以访问非静态成员。

public class A{
	private int id; //成员变量
	private String str;//成员变量

	private static int i=0;//静态变量
	public void test(){
		String s="abc";//局部变量
		System.out.println("成员方法");
	}
	public static void staticMethod(){
		i++;
		id=1;//出错
		System.out.println("静态方法");
	}
}

this关键字
在java中 this表示当前对象,this关键字被隐式地用于引用对象的成员变量和方法。
构造函数间调用,只能使用this进行互相调用,this函数不能用在一般函数间。

public class Example{
	public Example(){
		this("abc");//this调用构造函数  this语句只能定义在构造函数的第一行
		System.out.println("无参构造");
	}
	public Example(String name)(
		System.out.println("有参构造");
	}
}

static关键字
被static修饰的成员随着类的加载而加载,该成员优先于对象存在,属于所有的对象共享,生命周期与类的生命周期一致。

静态代码块
静态代码块随着类的加载而执行,只执行一次(类加载完后,就已经在内存中了),用于给类进行初始化,且优先于主函数执行。

static{
     System.out.println("hello java");
}

好了,上面铺垫了这么多,终于可以创建对象了。。。

三、创建对象

使用new 关键字

new 关键字后面跟着的就是我们的构造方法,通过类的构造方法来创建对象。

Example example=new Example();

创建出来的example是一个对象的引用,指向了内存中使用new创建的对象的地址。对象的初始化过程如下:

  • new Example()时会将Example.class文件通过java的虚拟机JVM加载进内存。
  • 在类加载时候先执行静态代码块和静态变量(如果有静态代码块和静态变量)。
  • 在堆中开辟内存空间。
  • 先默认初始化(对象为null,数字为0,布尔为false)
  • 对属性进行显示初始化(类中声明成员变量初始化值)
  • 再调用构造方法进行赋值初始化。
  • 将内存地址的赋值给example变量名,example引用指向该地址。
    还可以通过反射,克隆,反序列化的方式创建对象,这个我们以后再说。。。。
四、面向对象三大特性

封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
将属性设置为private,提供public的get/set方法。以下表格从上到下封装线逐渐变差

访问修饰符本类同包子类其他
private
default
protected
public

继承
继承是一种类与类之间的关系,是一种“is a”的关系。java中只有单继承,继承使得子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了代码的复用。继承的过程是一个从一般到特殊的的过程。
继承有两种:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力。接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。
java中使用extends 关键字实现继承。
重写
子类可以重写父类的方法,与父类的方法名相同。子类重写父类的方法,必须保证子类权限要大于或等于父类权限,才可以覆盖,且父类不能为private修饰。

public class Fruit{
	public String name;
	public String color;

	public void seal(){
		System.out.println("卖水果");
	}
}
//Apple 继承 Fruit, 可以拥有name和color属性
public class Apple extends Fruit{
	//重写父类的方法
	@Override
	public void seal(){
		System.out.println("卖苹果");
	}
}

super关键字
子类可以调用父类声明的构造方法,但是必须在子类的构造方法中使用super关键字来调用;如果想在子类中操作父类中被隐藏的成员变量和被重写的成员方法,也可以使用super关键字。

多态
多态就是对象的多种形态,java中分为引用多态,方法多态。
父类的引用可以指向子类的对象;
父类的引用可以指向本类的对象;
创建本类对象时,调用的方法为本类方法;
创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

五、对象创建的顺序

1.先是父类静态代码块,静态成员变量,顺序按照代码中出现的顺序。只执行一次
2.子类的静态代码块,静态成员变量。只执行一次
3.父类的普通代码块,非静态成员变量。
4.父类的构造方法。
5.子类的普通代码块,非静态成员变量。
6.子类的构造方法。


总结

理解面向对象和面向过程,理解类与对象的关系,理解创建对象的方法,理解面向对象的三大特性,理解存在继承关系时创建对象的顺序。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号