Java基础(五)OOP面向对象之(一) 面向对象思想初识

Java基础(五)OOP面向对象之(一) 面向对象思想初识

  • 面向对象
  • 类及其基本构成
  • 类创建实例
  • 名词解析:类、对象、实例
  • 主要解决的三大问题:封装、继承和多态

1. 理解面向对象的思想


面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法将软件系统看成各种对象的集合,接近人的自然思维方式。

对象是对问题领域中事件的抽象。对象具有以下特性:

1) 万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如学生,成绩单、教师、课和教室。

2) 每个对象都是惟一的。正如世界上不存在一模一样的叶子。(在Java内的体现为每个对象的类名不能相同。这里的类名指的是全路径的名称,比如java.lang.Numbercom.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内多态的理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值