Java 面向对象

面向过程(Procedure Oriented)

面向过程是一种以过程为中心的编程思想。是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。

就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

面向对象(Object Oriented)

面向对象是一种以事物为中心的编程思想。是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象是以功能来划分问题,而不是步骤。面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。

面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

通俗的来说:

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

面向对象三大特性

1、封装

将对象的实现细节隐藏起来,仅对外提供公共访问方式。将变化隔离,便于使用,提高复用性和安全性。

2、继承

当子类继承父类后,子类是一种特殊的父类,能够直接或间接获得父类里的成员。提高代码复用性;继承是多态的前提。

3、多态

父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。这意味着同一类型的对象在运行时可能表现出不同的行为特征。提高了程序的拓展性。

名词说明

对象(object):包含特性和行为的一个实体,对象也称为实例(instance)

类(class):具有相同特性和行为的多个对象的抽象

类的实例化:把类具体到某一个对象上面,该对象有具体的什么状态特征和什么行为。

类的定义

对象的一些状态特征使用成员变量表示

对象的行为使用方法表示

class 类名 {
	0~N个成员变量(字段Field);
	0~N个方法
}

注意:

  1. 若类使用 public 修饰,则类名必须和当前所在的文件名相同
  2. 类型必须符合标识符的命名规范(使用名词,首字母大写)

例子:人类

class Person {
	// 描述状态特征:成员变量
	String name;	 // 姓名
	int age;		 // 年龄
	int height;		 // 身高
	
	// 描述行为:方法
	void sing(){
		// 唱歌
	}
	
	void dance(){
		// 跳舞
	}
}

对象的创建

在程序中,必须先有类,再有对象(先得有模板,再有根据模板制造出来的个体)

创建对象

类 对象名 = new 类名();

赋值

对象名.变量名 = 值;

取值

变量 = 对象名.变量名

对象调用方法

对象名.方法名([实参])

匿名对象

创建一个对象,没有把它赋值给任何一个变量。只能使用一次。

构造器

构造器:在对象创建时,自动调用的方法,我们称它是构造器或者构造方法。

一个类至少存在一个构造器。创建对象其实就是在调用构造器。

构造器的作用

1、创建对象,必须和 new 一起使用。
2、完成对象的初始化操作。

构造器的特点

1、构造器的名称是和当前类名一致的。
2、禁止有返回值类型,不能使用void作为返回值。
3、在构造器当中不能使用return。

其实构造器是有返回值的,它返回的是当前创建对象的引用。

默认构造器

在类中找不到默认的无参构造器,但是通过反编译工具可以看到。

java 源文件:

public class User {
	String name;
	int age;

	public void showMe() {
		System.out.println("我是" + name);
	}
}

通过反编译后:

import java.io.PrintStream;

public class User
{

	String name;
	int age;

	public User()
	{
	}

	public void showMe()
	{
		System.out.println((new StringBuilder("我是")).append(name).toString());
	}
}

编译器编译源文件时,会创建一个默认的构造器,如果成员变量设置了默认值,默认值也是在默认构造器当中设置的。

java 源文件:

public class User {
	String name = "smile";
	int age = 20;

	public void showMe() {
		System.out.println("我是" + name);
	}
}

通过反编译后:

import java.io.PrintStream;

public class User
{

	String name;
	int age;

	public User()
	{
		name = "smile";
		age = 20;
	}

	public void showMe()
	{
		System.out.println((new StringBuilder("我是")).append(name).toString());
	}
}

默认构造器的特点

1、符合构造器的特点
2、没有参数
3、如果类使用了public修饰,它创建的默认构造器也会加public。

自定义构造器

自己定义了构造器,编译器就不会帮你再生成默认的构造器了。

public class User {
	String name;
	int age;
	
	public User() {
		name = "smile";
		age = 18;
	}
	
	public User(String userName, int userAge) {
		name = userName;
		age = userAge;
	}

	public void showMe() {
		System.out.println("我是" + name);
	}
}

自定义构造器后,成员变量设置了默认值,默认值是在自定义构造器当中最开始设置的。

java 源文件:

public class User {
	String name = "smile";
	int age = 20;
	
	public User() {
		name = "xzh";
		age = 18;
	}
	
	public User(String userName, int userAge) {
		name = userName;
		age = userAge;
	}

	public void showMe() {
		System.out.println("我是" + name);
	}
}

通过反编译后:

import java.io.PrintStream;

public class User
{

	String name;
	int age;

	public User()
	{
		name = "smile";
		age = 20;
		name = "xzh";
		age = 18;
	}

	public User(String userName, int userAge)
	{
		name = "smile";
		age = 20;
		name = userName;
		age = userAge;
	}

	public void showMe()
	{
		System.out.println((new StringBuilder("我是")).append(name).toString());
	}
}

构造器的重载

  1. 可以定义多个构造器,构造器的名称相同,参数不同。
  2. 在创建对象时,根据不同的参数,调用不同的构造器。
posted @ 2019-07-01 12:18  Lomen~  阅读(574)  评论(0编辑  收藏  举报