Java面向对象学习笔记-3

发布于:2023-09-16 ⋅ 阅读:(23) ⋅ 点赞:(0)

前言

本文将介绍Java编程中的一些基本概念和用法,包括类、接口、抽象类、继承、多态和组合等。通过代码示例,我们将深入探讨这些概念,帮助读者更好地理解如何使用Java进行面向对象编程。

Java面向对象学习笔记-1
Java面向对象学习笔记-2

纸张和墨盒类

我们首先来看纸张和墨盒类,它们是打印机的重要组成部分。

A4Paper 和 B5Paper

package cn.dfjy.demo.entity;

// A4纸张
public class A4Paper implements IPaper {
    @Override
    public String size() {
        return "A4纸张";
    }
}

package cn.dfjy.demo.entity;

// B5纸张
public class B5Paper implements IPaper {
    @Override
    public String size() {
        return "B5纸张";
    }
}

BlankInk 和 ColorInk

  • BlankInkColorInk 代表不同类型的墨盒,并都实现了 IInk 接口。
package cn.dfjy.demo.entity;

// 黑白墨盒
public class BlankInk implements IInk {
    @Override
    public String color() {
        return "黑白墨盒";
    }
}

package cn.dfjy.demo.entity;

// 彩色墨盒
public class ColorInk implements IInk {
    @Override
    public String color() {
        return "彩色墨盒";
    }
}

抽象类和继承

接下来,让我们研究抽象类和继承的概念。

Door 抽象类

  • Door 是一个抽象类,定义了门的基本行为,演示了抽象类的概念
package cn.dfjy.demo.entity;

// 门(is a)
public abstract class Door {
    public abstract void open();
    public abstract void close();
}

Mother、Father 和 Son

  • MotherFatherSon 是简单的类,演示了Java中的单继承概念。
package cn.dfjy.demo.entity;

public class Mother {
}

package cn.dfjy.demo.entity;

public class Father {
}

package cn.dfjy.demo.entity;

// 在java的语法体系中,是不支持多继承的
public class Son extends Father {
}

接口

接口是Java中非常重要的概念,用于定义规范和契约。

Iii 接口

  • Iii 是一个接口,包含一个常量和一个抽象方法。
package cn.dfjy.demo.entity;

public interface Iii {
    int A = 413; // 属性其实是常量 public static final

    void f1(); // 方法其实是共有抽象 public abstract

    //public Iii(){} // 没有构造方法
}

IPaper 和 IInk 接口

  • IPaperIInk 分别表示纸张和墨盒的接口,具有特定的方法。
package cn.dfjy.demo.entity;

// 纸张的接口
public interface IPaper {
    String size();
}

package cn.dfjy.demo.entity;

public interface IInk {
    String color();
}

Locker 和 Photograph 接口

  • LockerPhotograph 接口,分别表示锁和能够拍照的设备的行为。
package cn.dfjy.demo.entity;

// 锁(has a)
public interface Locker {
    // 可推导,可省略。没有写public abstract,也有。
    void lock();
    void unlock();
}

package cn.dfjy.demo.entity;

// 拍照(has a)
public interface Photograph {
    void take();
}

实现类

接下来,我们将介绍一个类,它继承自 Door 并实现了 LockerPhotograph 接口,演示了Java中多接口实现的概念。

ThiefProventDoor 类

package cn.dfjy.demo.entity;

// 它本质上,类同于C++的多继承
public class ThiefProventDoor extends Door implements Locker, Photograph {
    @Override
    public void open() {
        System.out.println("开门");
    }

    @Override
    public void close() {
        System.out.println("关门");
    }

    @Override
    public void lock() {
        System.out.println("左转三圈,上锁");
    }

    @Override
    public void unlock() {
        System.out.println("右转三圈,解锁");
    }

    @Override
    public void take() {
        System.out.println("默默地拍照一张");
    }
}

打印机类

最后,让我们介绍一个表示打印机的类,演示组合和多态的概念。

Printer 类

package cn.dfjy.demo.entity;

public class Printer {
    // 属性上多态
    private IInk ink;
    private IPaper paper;

    public Printer() {
    }

    public Printer(IInk ink, IPaper paper) {
        this.ink = ink;
        this.paper = paper;
    }

    public IInk getInk() {
        return ink;
    }

    public void setInk(IInk ink) {
        this.ink = ink;
    }

    public IPaper getPaper() {
        return paper;
    }

    public void setPaper(IPaper paper) {
        this.paper = paper;
    }

    @Override
    public String toString() {
        return "使用" + ink.color() + "在" + paper.size() + "上打印。";
    }
}

示例代码

以下是几个使用上述类和接口的示例代码:

示例 1:使用 ThiefProventDoor

package cn.dfjy.demo.test;

import cn.dfjy.demo.entity.ThiefProventDoor;

public class Demo01 {
    public static void main(String[] args) {
        ThiefProventDoor thiefProventDoor = new ThiefProventDoor();
        System.out.println("上班");
        thiefProventDoor.open();
        thiefProventDoor.close();
        thiefProventDoor.lock();
        System.out.println("下班回家");
        thiefProventDoor.unlock();
        thiefProventDoor.take();
        thiefProventDoor.open();
        thiefProventDoor.close();
    }
}
  • Demo01 示例展示了如何使用 ThiefProventDoor 类,模拟上班、下班回家、开门、关门等操作。

示例 2:访问接口常量

package cn.dfjy.demo.test;

import cn.dfjy.demo.entity.Iii;

public class Demo02 {
    public static void main(String[] args) {
        System.out.println(Iii.A);
    }
}
  • Demo02 示例演示了如何访问接口中的常量 A

示例 3:使用 Printer 类

package cn.dfjy.demo.test;

import cn.dfjy.demo.entity.*;

public class Demo03 {
    public static void main(String[] args) {
        // 买个整机
        Printer printer = new Printer(new ColorInk(), new A4Paper());
        System.out.println(printer);

        // 更换纸张和墨盒
        printer.setInk(new BlankInk());
        printer.setPaper(new B5Paper());
        System.out.println(printer);
    }
}
  • Demo03 示例展示了如何使用 Printer 类,构建具有不同墨盒和纸张组合的打印机,并打印相关信息。

总结

本文中,我们深入研究了Java编程中的关键概念,包括类、接口、抽象类、继承、多态和组合。我们通过代码示例演示了如何创建和使用这些概念,以及它们在面向对象编程中的重要性。理解这些概念是成为Java开发人员的关键一步,它们为构建灵活和可维护的应用程序提供了基础。希望本文能够帮助读者更好地掌握Java编程的基础知识,并在实际项目中应用它们。