• Java面向对象学习笔记-3


    前言

    本文将介绍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纸张";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    package cn.dfjy.demo.entity;
    
    // B5纸张
    public class B5Paper implements IPaper {
        @Override
        public String size() {
            return "B5纸张";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    BlankInk 和 ColorInk

    • BlankInkColorInk 代表不同类型的墨盒,并都实现了 IInk 接口。
    package cn.dfjy.demo.entity;
    
    // 黑白墨盒
    public class BlankInk implements IInk {
        @Override
        public String color() {
            return "黑白墨盒";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    package cn.dfjy.demo.entity;
    
    // 彩色墨盒
    public class ColorInk implements IInk {
        @Override
        public String color() {
            return "彩色墨盒";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    抽象类和继承

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

    Door 抽象类

    • Door 是一个抽象类,定义了门的基本行为,演示了抽象类的概念
    package cn.dfjy.demo.entity;
    
    // 门(is a)
    public abstract class Door {
        public abstract void open();
        public abstract void close();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Mother、Father 和 Son

    • MotherFatherSon 是简单的类,演示了Java中的单继承概念。
    package cn.dfjy.demo.entity;
    
    public class Mother {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    package cn.dfjy.demo.entity;
    
    public class Father {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    package cn.dfjy.demo.entity;
    
    // 在java的语法体系中,是不支持多继承的
    public class Son extends Father {
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接口

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

    Iii 接口

    • Iii 是一个接口,包含一个常量和一个抽象方法。
    package cn.dfjy.demo.entity;
    
    public interface Iii {
        int A = 413; // 属性其实是常量 public static final
    
        void f1(); // 方法其实是共有抽象 public abstract
    
        //public Iii(){} // 没有构造方法
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    IPaper 和 IInk 接口

    • IPaperIInk 分别表示纸张和墨盒的接口,具有特定的方法。
    package cn.dfjy.demo.entity;
    
    // 纸张的接口
    public interface IPaper {
        String size();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    package cn.dfjy.demo.entity;
    
    public interface IInk {
        String color();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Locker 和 Photograph 接口

    • LockerPhotograph 接口,分别表示锁和能够拍照的设备的行为。
    package cn.dfjy.demo.entity;
    
    // 锁(has a)
    public interface Locker {
        // 可推导,可省略。没有写public abstract,也有。
        void lock();
        void unlock();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    package cn.dfjy.demo.entity;
    
    // 拍照(has a)
    public interface Photograph {
        void take();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    实现类

    接下来,我们将介绍一个类,它继承自 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("默默地拍照一张");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    打印机类

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    示例代码

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

    示例 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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • Demo03 示例展示了如何使用 Printer 类,构建具有不同墨盒和纸张组合的打印机,并打印相关信息。

    总结

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

    当涉及到Java编程中的面向对象概念时,还有许多相关知识可以进一步拓展。下面是一些可能的拓展方向:

    1. 封装(Encapsulation):封装是面向对象编程的基本原则之一,它通过隐藏实现细节并提供公共接口来保护数据和方法。了解如何使用Java中的访问修饰符(public、private、protected等)来实现封装。

    2. 继承(Inheritance):继承允许从一个类派生出一个新类,并继承父类的属性和方法。了解如何使用extends关键字创建子类,并学习如何重写和调用父类的方法。

    3. 多态(Polymorphism):多态是指同一类型的对象在不同情况下表现出不同的行为。了解如何使用方法重载和方法重写来实现多态性,并学习如何使用父类引用指向子类对象。

    4. 接口(Interface):接口定义了一组方法的规范,而不提供其具体实现。了解如何使用接口来实现类之间的协议和多态性,并学习如何在类中实现多个接口。

    5. 抽象类(Abstract Class):抽象类是不能被实例化的类,它提供了一种用于派生其他类的基础。了解如何定义和使用抽象类,以及与接口之间的区别。

    6. 异常处理(Exception Handling):异常处理是用于处理程序运行时出现的错误或异常情况的机制。学习如何使用try-catch块和throw关键字来捕获和处理异常。

    7. 包(Package):包是一种组织和管理类的方式,它将相关的类放在一个命名空间下。了解如何创建和使用包,以及如何进行包之间的访问控制。

    8. 线程(Thread):线程是程序执行的单个顺序流,它可以并发地执行多个任务。了解如何创建和管理线程,以及如何处理线程同步和互斥的问题。

    9. 泛型(Generics):泛型允许在编译时指定类型参数,从而增加代码的类型安全性和复用性。了解如何使用泛型类、泛型方法和通配符来编写更灵活和可重用的代码。

    10. 注解(Annotation):注解提供了一种在代码中添加元数据的方式,它们可以提供编译器和工具使用的信息。了解如何创建和使用注解,并学习一些常见的内置注解。

    这些拓展方向将帮助你深入了解Java编程中的面向对象概念,并拓展你的知识和技能。通过深入学习这些概念,你将能够更好地理解和应用Java编程语言。

  • 相关阅读:
    CAS:474922-22-0 Maleimide-PEG-DSPE 磷脂-聚乙二醇-马来酰亚胺简述
    为脚本创建软连接到指定的PATH中,变为自定义命令程序
    三种获取URL参数值的方法
    DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)
    【成为红帽工程师】第五天 NFS服务器
    JavaScript基本功之生成器(generator)
    WinUI(WindowsAppSDK)使用LiteDB做个女演员图鉴
    计算机网络——IPv4详解
    第五章、实现Web适配器
    github配置ssh密钥
  • 原文地址:https://blog.csdn.net/qq_42531954/article/details/132794404