Java从零单排 -- 对象

171 阅读4分钟

一切都是对象

  • 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
  • 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。
  • 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
  • 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
  • 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。 上的几点就是对象在《thiking in java》一书中描述。 简单的,对象就是java用来描述一样的事物的统称。

对象就是java用来描述一样的事物的统称,那么用java语言怎么来描述呢,类(class)! 用类来描述一样事物的外观,行为。外观我们用字段来描述,行为将用方法。 在上一章节中,我们学会如何运用hello world,那么接着我们将在该项目中创建一个类。 创建类

右键com.company >new Java Class 在输入框中填写Firm 按Enter将创建一个类文件。

package com.company;

/**
 * 企业
 * 用Java代码描述了企业
 * 其中 private、public为Java中的关键字
 * private String address, private int size , private String name 为对企业
 * 描述的字段
 * public String navigationToFirm 为方法
 * .符号标识调用的意思  
 *
 * main方法可以通过输入psvm来快速创建
 */
public class Firm {
    //企业地址
    private String address;

    // 企业规模
    private int size;

    //企业名称
    private String name;

    /**
     * 导航到企业 
     *         这里是注释的第二种写法 多行注释 双斜杠中间夹着*号
     * @return
     */
    public String navigationToFirm() {
        return this.address;
    }

    public static void main(String[] args) {
        Firm firm = new Firm();//Java中所有对象都要通过new的方式创建
        firm.address = "深圳腾讯";//赋值给企业地址
        //调用企业方法,也就是企业有导航功能
        String navigation = firm.navigationToFirm();
        System.out.println(navigation);
    }
}
控制台将会输出 深圳腾讯
这样一个类,我们就创建完了。
每一个类都有一个默认的构造方法public 类名(){}

方法、自变量和返回值

Firm类中我们定义了navigationToFirm这个方法,在Java中所有类似type methodName(args)这样的形式我们都统称为方法,其中type就是返回值,methodName 为方法的名称,args为参数

 /**
     * 对企业名称进行设值
     *  void为Java中关键字,表示无返回值
     *  this为Java中关键字, 指当前类Firm
     *  args就是输入String name,Java中未定义的变量一定要声明的
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

继承、实现

  • 类的继承:上述我们创建一个叫Firm的类,现在我们又要创建一个XiaoMingFirm的类,XiaoMingFirm跟Firm一样,有address ,size,name以及navigationToFirm,那么我们在编写XiaoMingFirm类的时候又要重新写一遍了。在面向对象的设计中,我们可以避免这种情况,我们可以通过继承的方式。
 public class XiaoMingFirm extends Firm{

    }
    public static void main(String[] args) {
        XiaoMingFirm xiaoMingFirm = new XiaoMingFirm();//Java中所有对象都要通过new的方式创建
        xiaoMingFirm.address = "小明企业";//赋值给企业地址
        //调用企业方法,也就是企业有导航功能
        String navigation = xiaoMingFirm.navigationToFirm();
        System.out.println(navigation);
    }
    由于Firm的字段为 private,其作用域为私有变量,需要将private改为protectedprotected的作用域扩展到子类 
  • 接口:先定义一些接口规则,实现类必须要实现的规则
/**
 * 订单接口
 */
public interface Order {
    boolean acceptOrders(String OrderNum);
}

/**
 *  XiaoMingOrder 实现类
 *  implements 为Java关键字实现,只有实现接口的时候才用的
 *  @Override为重写的意思
 * 
 */
public class XiaoMingOrder implements Order{
    
    /**
     * 实现了Order接口
     * 
     * 
     * @param orderNum
     * @return
     */
    @Override
    public boolean acceptOrders(String orderNum) {
        //处理订单
        System.out.println(orderNum);
        return true;
    }
}

继承与接口的区别,好比一只小象继承了大象,这样小象的外观就会跟大象一样、一样的行为。接口是预先定义好规则,实现类一定要去重写接口的规则。具体将在后续的文章穿插讲解。