目录
一:什么是面向对象
1.面向对象
2.面向过程
3.面向对象之封装:类和对象
二:简单认识类
1.认识类
2.类的定义格式
3.类的实例化
4.说明
三:this引用
1.为什么需要有this引用
2.什么是this引用
3.this引用的特性
面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。
面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。
举个例子:洗衣服
传统洗衣服的方式:拿个盆子----放水----放衣服----放洗衣粉或洗衣液----揉搓----换水----加水----揉搓----拧干----晾衣服(将洗衣服这件事分成好多个步骤,有次序的完成)
将这些动作封装成函数直接调用
面向对象:
1.对场景进行分析---抽离出对象
2.再让对象去进行交互
再回到洗衣服这件事上
新式洗衣服的方法:
能涉及到的对象:衣服,人,洗衣机,洗衣液(由这几个对象交互完成目的)
以面向对象方式进行处理,人可以不关心洗衣服的过程,只需要将衣服放进洗衣机里,与传统的方法不同,传统的人参与了整个过程。
面向对象和面向过程并不是编程语言,而是一种解决问题的方法论-----一种思想
举个例子:
谜语:年纪不大 胡子一把 客人来了 就喊妈妈(打一物)
谜底:羊
这里的谜语就像类,谜底就像对象,谜语就是在对谜底进行描述。通俗的说:类就是用来描述的,而对象就是实际存在的
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能,描述完成后计算机就可识别了。
在java中定义类时需要用到class关键字
//创建类 class ClassName{ field; //字段(属性)或者成员变量 method; //行为或者成员方法 }
class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
//洗衣机类 public class WashMachine{ //成员变量(字段) //字段:修饰符 类型 字段名; public double length; public double height; public double weight; public String color; public String brand; public String type; //功能(成员方法) public void washClothes(){ System.out.println("洗衣服功能"); } public void dryClothes(){ System.out.println("烘干功能"); } }
采用java语言将洗衣机类在计算机中定义完成,经过javac的编译之后形成.class文件,在JVM的基础上计算机就可以识别了。
注意事项:
1. 类名注意采用大驼峰
2. 成员前写法统一为public(后面解释)
3.此处写的方法不带static关键字(后面解释)
用类类型创建对象的过程,称为类的实例化。在java中采用new关键字,配合类名来实例化对象。
注意:
1.类之中方法不能直接调用,必须要通过对象来进行调用
狗.eat() 猫.eat()
2.new关键字用于创建一个对象的实例
3.使用 . 来访问对象中的属性与方法
4.同一个类可以实例多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
1.类:是一种自定义类型,用来定义变量。类型是描述某种类别(群体)的属性+行为。
类没有实际的空间
2.对象:用类类型new出来的变量就将其称为对象,对象就是对类实际的一个体现,是实实在在存在的,可以使用类创建相同类型的好多个对象
public class Date{ public int year; public int month; public int day; public void setDate(int y,int m, int d){ year = y; month = m; day = d; } public void printDate(){ System.out.println(year + "-" + month + "-" + day); } public static void main(String[] args){ Date d1 = new Date; d1.setDate(2021,9,20); d1.printDate; } }
public class Date{ public int year; public int month; public int day; public void setDate(int y,int m, int d){ year = y; month = m; day = d; } public void setYear(int year){ year = year; } }
由上代码发现,一不小心函数的形参与成员变量的名字重名,有以下四种可能性
1.形参给成员变量赋值
2.形参给形参赋值
3.成员变量给成员变量赋值
4.成员变量给形参赋值
到底是哪一个也说不清了。
java编译器给每个“成员方法”增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。
public class Date{ public int year; public int month; public int day; //在成员方法中,有一个隐藏的this引用,this引用的是当前对象----调用这个方法的对象 public void setDate(int y,int m, int d){ this.year = y; this.month = m; this.day = d; }
1.this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2.this只能在“成员方法”中使用
3.在“成员方法”中,this只能引用当前对象,不能再引用其他对象,具有final属性
4.this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给成员方法,this负责接收