文章42
标签13
分类3

Java基础7

面向对象基础、封装、this关键字、匿名对象

面向对象基础

核心思想:万物皆对象

面向过程VS面向对象

  • 面向过程:侧重于怎么做?以函数为中心的
  • 面向对象:侧重于谁来做?以对象为中心的

事例

面向过程:

  • 开冰箱门
  • 抱起大象
  • 塞进冰箱
  • 关门

面向对象:

class Person{
  抱(){
  }
}

  • 冰箱

class 冰箱{
  开门(){
  }
  关门(){
  }
}

  • 大象

面向对象的核心:设计合适的类->核心(设计类的成员)

类 对象

  • 类:对一类事物的描述,是抽象的、概念上的存在(人)
  • 类结构:属性(对类的描述)+行为(类具有的功能)
  • 对象:实际存在的一类事物的个体,又叫做实例 (张三、李四)

面向对象思想的落地实现:

  • 设计类
    类格式:

修饰符 class 类名{
  属性(成员变量\field\域\字段)
  行为(成员方法)
}

  • 创建对象:
    类名 对象名 = new 类名();
  • 访问对象的属性以及行为
    对象名.属性名
    对象名.方法名();

补充:
如果在当前类下访问当前类的成员,直接访问即可
如果在其他类下访问当前类的成员,需要在其他类中创建当前类对象,通过 或者

面向对象三大特征之————封装

概述

隐藏类内部实现细节,只暴露该暴露的属性、方法供外部调用

体现

对类中的属性(xxx)进行私有化(使用private修饰符进行修饰),暴露(public)出对应的get(getXxx())/set(setXxx)方法供外部进行调用
封装实际就是通过private修饰符实现的

//封装之后得到局部变量
private int number;
private String name;
private double height;

创建getter和setter方法

    public int getNumber() {
        return number;
    }
    //this关键字下面会讲到
    public void setNumber(int number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }

构造带参和无参方法

  • 在未创建带参的构造方法时,系统会默认生成无参的构造方法
  • 如果创建了带参的构造方法,无参的构造方法就需要自行创建,习惯性的同时创建两种方法
    public Main(int number, String name, double height) {
        this.number = number;
        this.name = name;
        this.height = height;
    }
    public Main() {
    }

好处

  • 通过方法来控制成员变量的操作,提高了代码的安全性
  • 把代码用方法进行封装,提高了代码的复用性

补充:

  • 访问修饰符:(作用范围由小到大) private(同一个类)、缺省(同一个包下不同类)、protected(不同包下的子类)、public(当前工程)
  • 主要用于修饰:类、类的结构(属性、方法)、内部类、构造方法
  • 类: public、缺省
  • 类结构(属性、方法): 四个都可以使用
  • 使用修饰符的作用:控制结构(变量、方法)可见范围

this关键字

  • this代表所在类的对象引用,方法被哪个对象调用,this就代表那个对象
  • 局部变量名和成员变量名相同时使用,在局部使用的时候,采用就近原则,如果不用this关键字,就无法将局部变量赋值给成员变量
private int id;
int getId(){
return id;
}
void setId(int id){
this.id=id;//通过this将局部变量赋值给成员变量
}

练习

一、需求说明:创建三个图书类对象,找出价格最高的图书并打印该图书的所有信息。
二、设计“图书类”Book,要求有以下属性:
图书编号、书名、价格



匿名对象

匿名对象概述

匿名对象即没有引用的对象,没有名字的对象,与有名对象对比如下:

  • Person person = new Person();
    可以通过 person.showName(); 调用名为person对象的 showName() 方法
  • new Person().showName();
    匿名对象仅可调用一次,之后便被计算机删除

练习

请用代码描述: 小王卖出一部价值6000的iPhone手机

操作步骤描述

1.定义手机类
 (1).属性: 品牌(brand),价格(price)
 (2).要求:提供带参构造,setter与getter方法
2.定义人类(Person)
 (1).属性: 名称(name)
 (2).行为: 卖手机: Phone sellPhone() ,在方法内部使用匿名对象作为返回值
 (3).要求: 提供带参构造,setter和getter方法
3.定义测试类Test
 (1).提供main方法
 (2).在main方法中
  (a).使用带参构造创建Person对象 p,name初始化为小王
  (b).调用对象p的sellPhone()方法,赋值给Phone phone变量
4.在main方法输出: 小王卖出一部价值6000的iPhone手机



本文作者:GreedRing
本文链接:http://greedring.com/2019/08/27/JavaSE7/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可