回到第一章:目录
上一节简单介绍了java的语法基础,体验了循环和分支语句的写法,这一节来认识下面向对象编程的理念。
在工程里新建一个包: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的和、差、积。
在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);
}
}
分别运行上面的代码,体会写法的不同。
万事万物皆为对象,可把任意具有某类特性或功能的事物封装成对象。
上面的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对象属性,方法的使用。
在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的对象属性。