Java面向对象

打印 上一主题 下一主题

主题 1005|帖子 1005|积分 3015

面向对象(OOP)和面向过程

OOP: Object Oriented Programming
面向过程: procedure oriented programing
  两者都是一种思想, 面向对象是相对于面向过程而言的。面向过程强调的是功能行为; 面向对象则是将功能封装进对象,强调具备了功能的对象
面向过程的三大特征


  • 封装(Encapsulation)
  • 继承(Inheritance)
  • 多态(Polymorphosm)
类和对象

类(class)和对象(Object)是面向对象的核心概念, 万事万物皆对象
类是对现实中一类事物的抽象描述,现实事物都具有属性和行为
类的成员变量描述事物的属性,类的成员方法描述事物的行为
对象则是实际存在的该类的一个个体, 是根据类的描述而创建出来的具体实例(instance)
定义类
  1. public class Phone {
  2.     // 成员变量
  3.     String brand;
  4.     double price;
  5.     String color;
  6.     // 成员方法
  7.     public void call(){
  8.         // 方法中未定义变量时, 会在成员变量中寻找对应的变量
  9.         System.out.println(brand + " " + color + " " + price +"元的手机打电话了");
  10.     }
  11.     public void sms() {
  12.         System.out.println(brand + " " + color + " " + price +"元的手机发短信了");
  13.     }
  14. }
复制代码
创建对象
  1. public class Demo {
  2.     public static void main(String[] args) {
  3.                 // 创建对象, 依据是类模板
  4.                 Phone p1 = new Phone();
  5.                 Phone p2 = new Phone();
  6.                 // 对象属性的访问, 对象.属性
  7.                 p1.brand = "xiaomi";
  8.                 p1.color = "blue";
  9.                 p1.price = 1999.9;
  10.                 // 对象方法的访问 对象.方法名(参数)
  11.                 p1.call();
  12.                 p1.sms();
  13.                 // 每个对象都有自己的属性 且互不干扰
  14.                 p2.brand = "huawei";
  15.                 p2.color = "black";
  16.                 p2.price = 2399.9;
  17.                 p2.call();
  18.                 p2.sms();
  19.     }
  20. }
复制代码
成员变量的默认值

JVM会自动对成员变量进行初始化
成员变量的默认值(隐式赋值)
  1. int        0
  2. double        0.0
  3. String        null
  4. char        \u0000
复制代码
成员变量的显式赋值
  1. public class Car {
  2.     String brand = "leinuo";
  3.     String color;
  4.     double price = 9999.9;
  5. }
复制代码
属性私有化

防止在其它类中对成员变量直接的修改, 对数据进行一定的保护
可以使用修饰符private,被private修饰的成员变量/方法仅可以在本类中访问
  1. public class Phone {
  2.     // 成员变量
  3.     private String brand;
  4.     private double price;
  5.     private String color;
  6. }
复制代码
setter和getter

在本类中给添加新的方法, 用于间接的访问私有属性
  1. // Phone Class
  2. // 给属性赋值使用的方法被称为set方法, 有参无返回
  3. // 可以在set方法中对值的合法性做判断, 从而保护数据
  4. public void setPrice(double p) {
  5.         if (price < 0 || price > 30000) {
  6.             return ; // 提前弹栈
  7.         }
  8.         price = p;
  9. }
  10. // 获取属性值的方法被称为get方法, 无参有返回
  11. public double getPrice() {
  12.         return price;
  13. }
  14. public void setBrand(String b) {
  15.         brand = b;
  16. }
  17. public String getBrand() {
  18.         return brand;
  19. }
  20. public String getColor() {
  21.         return color;
  22. }
  23. public void setColor(String c) {
  24.         color = c;
  25. }
  26. // Demo Class
  27. Phone p1 = new Phone();
  28. p1.setBrand("huawei");
  29. p1.setColor("black");
  30. p1.setPrice(2399.9);
  31. System.out.println(p1.getBrand() + " " + p1.getColor() + " " + p1.getPrice());
复制代码
在idea中可以使用alt+insert -> Getter and Setter快速创建getter和setter
关键字 - this

上面的代码中的形参 a、b、c 不易区分
若修改为与成员变量相同, 由于就近原则(优先访问距离最近的)会导致成员变量没有接收到值
  1. public void setColor(String color) {
  2.         // 自己的值赋给自己
  3.         color = color;
  4. }
复制代码
则需要对成员变量和局部变量加以区分,使用this关键字
this表示对象, this.color就是对象的color属性
  1. public void setColor(String color) {
  2.         this.color = color;
  3. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表