【Java】【类和对象】面向对象
对象,百度百科给出的解释为:对象,常有两层意思,指行动或思考时作为目标的事物或特指恋爱的对方等含义。从这个概念中可以提炼出来的一句关于对象的描述就是“万物皆是对象”,这是人们常在谈论Java对象时提到的一句话。
对于万物的解释,应该是具体的、有生命或没有生命的。比如,我看到一条鱼在水里游,我和鱼都是对象,我们是有生命的;我在回答一道考试题目,我和考试题都是对象,我是有生命的,而考试题是没有生命的等等。
对象是通过你的思考或者感受直接体会到的事物,它/他/她们是具体的事物。你理解了吗?
1.面向对象
Java是面向对象的高级编程语言。Java努力将所有的具体事物解析成对象,生成抽象的“类”;然后又通过实例化的方式由“类”创建无数“对象”出来。这个过程涉及两个步骤:第一,攻城狮需要将生活中的对象抽象成Java程序中的Class(类);第二,在实际的业务逻辑操作中,攻城狮又需要通过Class(类)new(新建)出Object(对象),这个过程被称为实例化。其实,这个过程如同我用中文描述了一段文字,然后又得用英文描述同样的文字意思的过程,只不过你需要特别注意英文的语法。这也在一定程度上解释了,Java是一种语言,只不过具有特殊语法而已。
2.从对象到Class(类)
①这里的对象指的是生活中实际存在的业务对象。比如,我正在点击的鼠标;我正使用的笔记本电脑;头顶上的灯;我的卧室;我的同事老张等等。
②拿我的同事老张这个对象来举例:Java攻城狮会从两个方面考虑,特征和行为功能。首先,将老张这个个体进行一次概念抽象,老张是一个人,他具有人的特性和行为功能。特征如:姓名,年龄,性别等;行为功能如:学习、工作等。然后将这些特征和行为功能通过Java的语法描述出来就是,创建一个Person(人)的类,这个类包含了name、age、gender等属性(特征),还包含了study、work等方法(行为功能),这里就体现出了Java面向对象三大特征之一封装的特点。如下代码所示:
public class Person{ private String name;// 姓名 private Character gender;// 性别 private Integer age;// 年龄 public void study(){ System.out.println("老张在学习..."); } public void work(){ System.out.println("老张在工作..."); } }
3.从Class(类)到Object(对象)
①这里的Object(对象)不再是生活中的对象,而是在Java程序中的对象,这个对象映射了生活中的对象,他更加简洁。
②实例化老张,代码如下:
public static void main(String[] args){ Person laozhang = new Person();// 创建对象laozhang }
③这时,系统只是在内存中分配了一些空间给这个对象laozhang,他并没有实际的含义,攻城狮可以使用setter方法对laozhang这个对象进行构造。
// 姓名,性别,年龄的setter方法 public void setName(String name){ this.name = name; } public void setGender(Character gender){ this.gender= gender; } public void setAge(Integer age){ this.age= age; } public static void main(String[] args){ Person laozhang = new Person(); laozhang.setName("老张"); laozhang.setGender('男'); laozhang.setAge(40); }
④构造完毕之后,还可以通过toString方法,将laozhang这个对象输出显示。
@Override public String toString() { return "Person [name=" + name + ", gender=" + gender + ", age=" + age + "]"; } public static void main(String[] args) { Person laozhang = new Person(); laozhang.setName("老张"); laozhang.setGender('男'); laozhang.setAge(40); System.out.println(laozhang);// 这里默认调用上面的toString方法 }
4.Person类完整代码
public class Person { private String name; private Character gender; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Character getGender() { return gender; } public void setGender(Character gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", gender=" + gender + ", age=" + age + "]"; } public static void main(String[] args) { Person laozhang = new Person(); laozhang.setName("老张"); laozhang.setGender('男'); laozhang.setAge(40); System.out.println(laozhang);
// 通过getter方法获取对象的属性值 System.out.println("姓名:" + laozhang.getName()); System.out.println("性别:" + laozhang.getGender()); System.out.println("年龄:" + laozhang.getAge()); } }
运行结果:
Person [name=老张, gender=男, age=40] 姓名:老张 性别:男 年龄:40