面向对象(上)-类与对象

一、面向对象学习的三条主线(大处着眼 小处着手)

  1. Java类及类的成员:属性、方法、构造器;代码块、内部类
  2. 面向对象的三大特征:封装性、继承性、多态性、(抽象性)
  3. 其他关键字:this、super、static、final、abstract、interface、package、import等

二、面向对象与面向过程(理解)

举例:“把大象装进冰箱”

  1. 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
    ①把冰箱门打开
    ②抬起大象,塞进冰箱
    ③把冰箱门关掉
  2. 面向对象:强调具备了功能的对象,以类、对象为最小单位,考虑谁来做
人{
      打开(冰箱){
          冰箱.开开();
      }

      抬起(大象){
          大象.进入(冰箱);
      }

      关闭(冰箱){
          冰箱.闭合();
      }
 }
冰箱{
      开开(){}
      闭合(){}
 }
大象{
      进入(冰箱){}
 }

三、完成一个项目(或功能)的思路

四、面向对象中两个重要的概念

  • 类:对一类事物的描述,是抽象的、概念上的定义
  • 对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)

  • 面向对象程序设计的重点就是类的设计
  • 设计类,就是设计类的成员
  • 二者的关系:对象,是由类new出来的(派生出来的)

五、面向对象思想落地实现的规则

  1. 创建类,设计类的成员
  2. 创建类的对象
  3. 通过"对象.属性"或"对象(对象名).方法"调用对象的结构

    补充:几个概念的使用说明
      属性(对应类中的成员变量) = 成员变量 = field = 域、字段
      方法(对应类中的成员方法,方法体现的是行为) = 成员方法 = 函数 = method
      创建类的对象 = 类的实例化 = 实例化类

六、对象的创建与对象的内存解析

  • 典型代码
Person p1 = new Person();
Person p1 = new Person();
Person p3 = p1;//此处没有新创建一个对象,共用一个堆空间中的对象实体
  • 说明
如果创建了一个类的的多个对象,则每个对象都独立的拥有一套类的属性(非static的)
意味着,如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值
  • 内存解析

七、匿名对象

  • 理解:我们创建的对象,没有显示的赋给一个变量名,即为匿名对象
  • 举例:
//"有名"对象
        phone.sendEmail();
        phone.playGame();
 //匿名对象
        new Phone().sendEmail();
        new Phone().playGame();
  • 特点:匿名对象只能使用一次
        new Phone().price = 1999;
        new Phone().showPrice();//0.0
  • 应用场景:
public class InstanceTest {
    public static void main(String[] args) {
        Phone phone = new Phone();
        //phone = null;
        System.out.println(phone);//com.oopt.demo.Phone@4554617c

        //"有名"对象
        phone.sendEmail();
        phone.playGame();

        //匿名对象
        new Phone().sendEmail();
        new Phone().playGame();

        new Phone().price = 1999;
        new Phone().showPrice();//0.0

        //******
        PhoneMall mall = new PhoneMall();
        //mall.show(phone);
        //匿名对象的使用
        mall.show(new Phone());
    }

}

class PhoneMall{
    public void show(Phone phone){
        phone.sendEmail();
        phone.playGame();
    }
}

class Phone{
    double price;//价格

    public  void sendEmail(){
        System.out.println("发送邮件");
    }

    public void playGame(){
        System.out.println("玩游戏");
    }

    public void showPrice(){
        System.out.println("手机价格为:" + price);
    }
}
posted @ 2021-06-29 10:38  犄角旮旯是程序媛吖  阅读(68)  评论(0编辑  收藏  举报