1.6-面向对象编程与面向过程编程

面向对象编程与面向过程编程

回到第一章:目录


文章目录

  • 面向对象编程与面向过程编程
  • 前言
  • 一、面向对象的概念
    • 1、面向过程的写法
    • 2、面向对象的写法
  • 二、对象的封装与继承
    • 1.封装
    • 2.继承


前言

上一节简单介绍了java的语法基础,体验了循环和分支语句的写法,这一节来认识下面向对象编程的理念。


一、面向对象的概念

1、面向过程的写法

在工程里新建一个包:com.my.obj;
在这包下,新建class,名为ObjectLearning
内容为:

package com.my.obj;

public class ObjectLearning {
    public static void main(String[] args) {
        /**实现:任意给定2个数a和b,分别计算a,b的和、差、积*/

        //1、面向过程的写法
        int a = 12; //保存操作数a
        int b = 32; //保存操作数b
        int c = 0;  //结果保存到c中
        c = a + b;
        System.out.println("a和b的和为:"+ a + "+" +b +"=" + c);
        c = a - b;
        System.out.println("a和b的差为:"+ a + "-" +b +"=" + c);
        c = a * b;
        System.out.println("a和b的积为:"+ a + "*" +b +"=" + c);
    }
}

程序运行,执行main函数里的代码,实现 任意给定2个数a和b,分别计算a,b的和、差、积。

2、面向对象的写法

在com.my.obj包下,新建class,名为:Operation,代码如下:

package com.my.obj;

/**
 * Operation 是一个运行器类 Operation类名
 */
class Operation{
    int a; // a是Operation 属性
    int b; // b是Operation 属性

    Operation(int a,int b){ //Operation的构造方法
        this.a = a;
        this.b = b;
    }
    public int compute(char op){ //Operation的计算方法,接受一个参数:操作符

        switch (op){ //根据不同的操作符,进行不同的操作运算。
            case '+' :{
                return a+b;
            }
            case '-' :{
                return a-b;
            }
            case '*' :{
                return a*b;
            } default:{
                return 0;
            }
        }
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }
}

然后在ObjectLearning对象里,把main函数里的内容改为:

package com.my.obj;

public class ObjectLearning {
    public static void main(String[] args) {
        /**实现:任意给定2个数a和b,分别计算a,b的和、差、积*/

        //1、面向过程的写法
//        int a = 12; //保存操作数a
//        int b = 32; //保存操作数b
        int c = 0;  //结果保存到c中
//        c = a + b;
//        System.out.println("a和b的和为:"+ a + "+" +b +"=" + c);
//        c = a - b;
//        System.out.println("a和b的差为:"+ a + "-" +b +"=" + c);
//        c = a * b;
//        System.out.println("a和b的积为:"+ a + "*" +b +"=" + c);

        //2、面向对象的写法
        Operation op = new Operation(14,24); //创建一个运算对象,初始化对象的属性a,b分别为14,24
        c = op.compute('+');  // 调用对象Operation的compute方法进行运行
        System.out.println("求和运算:"+ op.getA() + "+" +op.getB() +"=" + c);
        c = op.compute('-');
        System.out.println("求差运算:"+ op.getA() + "-" +op.getB() +"=" + c);
        c = op.compute('*');
        System.out.println("求积运算:"+ op.getA() + "*" +op.getB() +"=" + c);

        op.setA(23); //重新设置Operation对象属性a的值
        op.setB(54);//重新设置Operation对象属性b的值
        c = op.compute('+');
        System.out.println("求和运算:"+ op.getA() + "+" +op.getB() +"=" + c);

    }
}

分别运行上面的代码,体会写法的不同。

二、对象的封装与继承

1.封装

万事万物皆为对象,可把任意具有某类特性或功能的事物封装成对象。
上面的Operation.java就是封装的一个对象。现在来封装一个比较复杂的用户对象。
新建User.java,复制以下内容:

package com.my.obj;

import java.util.Date;

/**
 * User 对象
 */
public class User {
    public  Long id;  // Long是长整型对象,
    public String name; //String 是字符串对象
    public String password;
    public int age;  //int是基本数据类型,不算是对象
    public  Date birthday; //Date 是日期对象
    public float rate;//float,不算是对象

    /**toString 是User对象的方法*/
    public String toString(){
        return name +" 的年龄是:" + age +"; 生日是:" + birthday;
    }

    User(){ //无参数的构造方法,

    }
    User(Long id,String name,String password,int age,Date birthday,float rate){ //有参数的构造方法,
        this.id = id; //this 是指 User对象的引用
        this.name = name;
        this.password = password;
        this.age = age;
        this.birthday =birthday;
        this.rate = rate;
    }

    /**以下 set类和get类方法,是设置属性值和获取属性值的方法*/
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public float getRate() {
        return rate;
    }

    public void setRate(float rate) {
        this.rate = rate;
    }
}

然后在ObjectLearning对象里,把main函数里的内容改为:

package com.my.obj;

import java.util.Date;

public class ObjectLearning {
    public static void main(String[] args) {

        //测试User对象
        User user = new User();  //使用无参构造方法创建
        user.setAge(18);
        user.setBirthday(new Date());
        user.setId(10001L);
        user.setName("小明");
        user.setPassword("123456");
        user.setRate(100.00f);
        System.out.println(user.toString());

        //使用有参构造函数创建
         user = new User(10002L,"大明","123456",19,new Date(),99.00f);
        System.out.println(user.toString());

    }
}

运行,ObjectLearning的main函数,体验 User对象属性,方法的使用。

2.继承

在com.my.obj包中,新建对象VipUser,复制以下内容

package com.my.obj;
import java.util.Date;
public class VipUser extends User{
    String level;//vip等级
    VipUser(Long id, String name, String password, int age, Date birthday, float rate,String level){ //有参数的构造方法,
        super(id,name,password,age,birthday,rate);//调用父类的构造函数初始化从父类继承而来的属性。
        this.level = level;
    }
    public String toString(){
        return name +" 的年龄是:" + age +"; 生日是:" + birthday+"; vip等级:"+level;
    }
    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }
}

VipUser 继承自 User,又增加了level属性,重新写了toString()方法和有参构造函数。
然后在ObjectLearning对象里,把main函数里的内容改为:

package com.my.obj;
import java.util.Date;
public class ObjectLearning {
    public static void main(String[] args) {
        VipUser vipUser = new VipUser(10002L,"大明","123456",19,new Date(),99.00f,"A");
        System.out.println(vipUser.toString());
    }
}

运行ObjectLearning的main函数,体验 VipUser 对象属性,可见VipUser 对象也有了User的对象属性。

你可能感兴趣的:(开发-测试技术基础知识培训)