类和对象(上)

Posted 张同学吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和对象(上)相关的知识,希望对你有一定的参考价值。

类和对象

面向对象与面向过程

一、面向对象与面向过程的区别

面向过程和面相对象并不是一门语言,而是解决问题的方法。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

二、面向对象与面向过程的优缺点

用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。
蛋炒饭制作的最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。
蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。
蛋炒饭和盖浇饭没有那个好坏之分,都有其专门的应用场景。
盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。蛋炒饭将"蛋”“饭"搅和在一起,想换"蛋”"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。

类的定义和使用

一、类是什么

面相对象程序设计关注的是对象,而对象是现实生活中的实体。
这种实体计算机并不认识,需要我们告诉给计算机什么是实体。也就是对于这类实体进行抽象(对一个复杂事物的重新认知),一个简单的属性描述,开发人员可以采用某种面相对象的编程语言来进行描述。
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

二、类的定义

在java中定义类时需要用到class关键字,具体语法如下

// 创建类
class ClassName 
 field; // 字段(属性) 或者 成员变量
 method; // 行为 或者 成员方法

class为定义类的关键字,ClassName为类的名字, 中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法

class PetDog 
public String name;//名字
public String color;//颜色
// 狗的属性
public void barks() 
System.out.println(name + ": 旺旺旺~~~");

// 狗的行为
public void wag() 
System.out.println(name + ": 摇尾巴~~~");


public class Student
public String name;
public String gender;
public short age;
public double score;
public void DoClass()
public void DoHomework()
public void Exam()

注意事项

  • 类名注意采用大驼峰定义
  • 一般一个文件当中只定义一个类
  • main方法所在的类必须要使用public修饰
  • public修饰的类必须要和文件名相同

类的实例化

3.1 什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog类和Student类。它们都是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。
**用类类型创建对象的过程,称为类的实例化,**在java中采用new关键字,配合类名来实例化对象。

public class Main
	public static void main(String[] args) 
		PetDog dogh = new PetDog(); //通过new实例化对象
		dogh.name = "阿黄";
		dogh.color = "黑黄";
		dogh.barks();
		dogh.wag();
		
		PetDog dogs = new PetDog();
		dogs.name = "阿黄";
		dogs.color = "黑黄";
		dogs.barks();
		dogs.wag();
	


输出结果:
阿黄: 旺旺旺~~~
阿黄: 摇尾巴~~~
赛虎: 旺旺旺~~~
赛虎: 摇尾巴~~~

注意事项

  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.
  • 同一个类可以创建多个实例.

3.2 类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
  2. 类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们称为对象.
  3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。

this引用

什么是this引用

java编译器给每个“成员方法“增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

public class Date 
	public int year;
	public int month;
	public int day;
	public void setDay(int year, int month, int day)
		this.year = year;
		this.month = month;
		this.day = day;
	
	public void printDate()
		System.out.println(this.year + "/" + this.month + "/" + this.day);
	

4.3 this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在"成员方法"中使用
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
    在代码层面来简单演示—>注意:下图右侧中的Date类也是可以通过编译的

    从字节码层面来简单证明:

以上是关于类和对象(上)的主要内容,如果未能解决你的问题,请参考以下文章

类和对象(上)

面相对象之继承

跟着我学Python然后new一个对象,类和对象的基本概念以及练习题

Python面向对象:面向对象(OOP)基本概念类和对象基础语法封装案例私有属性和私有方法

Python面向对象:面向对象(OOP)基本概念类和对象基础语法封装案例私有属性和私有方法

8.python之面相对象part.1(初识类与对象)