Java基础(五)OOP面向对象之(一) 面向对象思想初识
- 面向对象
- 类及其基本构成
- 类创建实例
- 名词解析:类、对象、实例
- 主要解决的三大问题:封装、继承和多态
1. 理解面向对象的思想
面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。
对象是对问题领域中事件的抽象。对象具有以下特性:
1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。
2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。(在Java内的体现为每个对象的类名不能相同。这里的类名指的是全路径的名称,比如java.lang.Number
和com.us.demo.Number
两者虽然名称都是Number类,但是类的全路径名称不同,所以这样的命名是合理的。)
3) 对象具有属性和行为。
例如小张,性别女,年龄22,身高1.6m, 体重40kg, 能够学习,唱歌。小张的属性包括姓名、性别、年龄、身高和体重,行为包括学习、唱歌。
例如一部手机,牌子是诺基亚、价格是2000元,银白色,能够拍照、打电话和收发短信等。这部手机的属性包括品牌类型type、价格price和颜色color,行为包括拍照takePhoto(),打电话call(),收发短信receiveMessage()和发短信sendMessage()。
4) 对象具有状态。状态是指某个瞬间对象的各个属性的取值。对象的某些行为会改变对象自身的状态,即属性的取值。
例如小张本来体重为40kg,经为减肥后,体重减到45kg.
肥胖状态: 40kg
|
| 减肥行为
|
肥胖状态: 35kg
public boolean reduceWeight(int oldWeight, int nowWeight){
// 减肥成功操作 ,将减肥的成果作为布尔类型返回出来。
}
5) 每个对象都是某个类的实例。小张和小王都属于学生类、中国和美国都属于国家类、中文和英文都属于语言类。
类是具有相同属性和行为的对象的集合。
同一个类的所有实例都有相同属性,但属性取值不一事实上相同,但是它们的状态不一定相同。例如小张和小王都属于学生类,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。
同一个类的所有实例都有相同行为,意味着它们具有一些相同的功能。
2. 创建类
类是一组具有相同属性和行为对象的模板。面向对象编程的主要任务就是定义对象模型中的各个类。
package sample;
// 常有的Java内的Bean类 也叫Model类 或者 POJO类
public class Teacher {
/**attributes of a teacher*/
private String name;
private int age;
private double salary;
/** Creates a new instance of Teacher */
public Teacher(String name, int age, double salary) {
this.salary = salary;
this.age = age;
this.name = name;
}
/**operations on properties */
/** get the name of this teacher */
public String getName() { return name; }
/**get the salary of this teacher */
public double getSalary() { return salary; }
/**get the age of teacher teacher */
public int getAge() { return age; }
……
}
代码解析:
1) package sample;
包声明语句,将Java类放到特定的包中,便于类的组织、权限访问和区分名字相同的类。
2) public class Teacher {…}
类的声明语句,类名为Teacher, public修饰符意味着这个类可以被公开访问;
声明类的格式:
class 类名 {
类内容
}
3) private String name;
类的属性(也称为成员变量)的声明语句;Teacher类有一个name属性,字符串类型,private修饰符意味着这个属性不能被公开访问。
4) public String getName() { return name; }
方法的声明语句和方法体。方法名为getName,不带参数,String表明返回类型为String。public表明这个方法可以被公开访问。getName后紧跟的大括号为方法体,代表getName的具体实现。
声明方法的格式:
返回值类型 方法名 (参数列表) {
方法体
}
- 返回值类型是方法的返回数据的类型, 如果返回值类型为void, 表示没有返回值。
- 方法名是任意合法的标识符;一般的类名为单词的首字母大写,一般的方法名为首个单词的首字母小写,其余单词的首字母大写。
- 参数列表可包含零个或多个参数,参数之间以逗号”,”分开。可以使用可变参数类型。
- 方法体每个语句用”;”结束;
- 方法体中使用return语句返回数据或结束本方法的执行;
注:不介绍构造方法。在面向对象章节会提到。
3. 创建实例
public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}
main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必须同时符合以下几个条件:
- 用public static修饰;
- 返回类型为void;
- 方法名为main;
- 参数类型为String[];
包含main方法的类又叫主程序类。Java程序启动后,就会运行方法的主程序类。
类创建好之后,通过new关键字创建具体对象。它有以下作用: - 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;分配的指针通常存在堆内,分配的对象实例的空间通常存在于栈内;
- 如实例变量显示初始化,将初始化值赋给实例变量;
- 调用构造方法;(具体的对象实例的生车过过程我们会在下一小节详细的阐述。)
- 返回对象的引用;
4. 名词解析:类、对象、实例
类是对象的模板。实例约等于对象。
- 类: 具有相同属性和行为的对象的集合。
- 对象: 问题领域中的实体和概念都可以抽象为对象。
- 实例: 每个对象都是类的实例。实例相当于 适用于某些类的模板的对象。
- 属性: 也就是类的固有属性和特征。
- 行为: 类的特有操作,Java内也称之为方法。
5. 封装、继承、多态
- 封装: 将类中的某些属性和方法的实现细节隐藏。为了保障类的安全性;以及方便类的使用。
- 继承: 为了重用某些类中的特性和方法。为了便于类的维护和扩展;为了方便类的使用。
- (继承的权限访问权限方式,Java采用的是单继承多个实现的方式。但是所有的类对象默认继承Object类?多继承?基本数据类型是否也是类?)
- 多态: 指允许不同的类的对象对于同一方法做出响应。即同一消息根据发送对象的不同二采用多种不同的行为方式。
- (对于多态,你既需要如何调用子类的方法,可需要知道如何调用父类的方法。)
6. 参考文献
[1]. Java内多态的理解