🕌

让全家人像养育宝可梦一样学习面向对象编程的超强Java入门书~将热情转化为学习的神奇绘本~

に公開

📚 宝可梦与Java编程:章节目录


🧩 第1章 创建宝可梦图鉴!类的设计图

🎯 1.1 什么是对象

在宝可梦的世界中,比如皮卡丘、小火龙等,都是“对象”。
在现实世界中,自行车或智能手机也是对象。

对象有两个主要部分:

  • 🧬 属性(字段):例如皮卡丘的“类型”、“等级”等
  • 🛠 行为(方法):例如“十万伏特”、“叫声”等技能

🏗 1.2 创建类

类是对象的“设计图”。
例如有一个“宝可梦”类,可以用它来创建皮卡丘、小火龙等各种对象。

public class Pokemon {
    String name;
    String type;
    int level;

    public void introduce() {
        System.out.println("你好!我是" + name + ",类型是" + type + ",等级是" + level + "!");
    }
}

🧪 1.3 总结与测试

项目 内容
宝可梦的设计图
对象 实际创建的皮卡丘、小火龙等实例
属性 名称、类型、等级等
方法 比如 introduce() 自我介绍方法

🎯 第2章 从精灵球中召唤!实例的创建与使用

🧱 2.1 创建实例

使用 new 关键字可以根据类创建对象,这就像从精灵球中召唤宝可梦一样。

Pokemon pika = new Pokemon();

🔓 2.2 使用 getter 和 setter

getter 用于获取属性值,setter 用于设置属性值。

public String getName() { return name; }
public void setName(String name) { this.name = name; }

🛠 2.3 添加方法

public void useMove() {
    System.out.println(name + "使用了" + move + "!效果拔群!");
}

🎯 2.4 总结与测试

通过实例、getter、setter 和方法调用,掌握类的基本用法。

🛡 第3章 保护宝可梦的秘密!类的机制

🔐 3.1 限制其他类的访问

使用 private 关键字可以保护字段不被外部直接访问。

public class Pokemon {
    private int hp;

    public int getHp() {
        return hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }
}

⚙️ 3.2 成员的机制

  • static 成员是所有实例共享的属性(如最大等级)。
  • 实例成员是每个对象独有的。

🧱 3.3 构造方法的机制

构造方法用于在创建对象时初始化字段。Java 支持重载多个构造函数。

public Pokemon(String name, int level) {
    this.name = name;
    this.level = level;
}

🧪 3.4 总结与测试

项目 内容
private 限制访问
public 允许访问
static 类共享的字段
构造方法 创建对象时自动调用的方法

🧭 第4章 指向宝可梦!实例与引用的秘密

🎯 4.1 什么是引用

在 Java 中,变量实际保存的是对象的引用(地址),而不是对象本身。

Pokemon p1 = new Pokemon();
Pokemon p2 = p1; // p1 和 p2 指向同一个对象

👀 4.2 注意引用的副作用

修改 p2 的内容,会影响到 p1,因为它们指向同一个实例。

🧊 4.3 创建不可变类(Immutable)

使用 final 和不提供 setter 方法可以创建不可变对象。

public final class Pokemon {
    private final String name;
    public Pokemon(String name) { this.name = name; }
    public String getName() { return name; }
}

🧬 4.4 引用类型

类型 示例 说明
基本类型 int, double 存储值本身
引用类型 String, Object 存储对象地址

🧪 4.5 总结与测试

理解引用对于避免误修改、掌握 Java 内存模型至关重要。

🧪 第5章 设计你的原创宝可梦!对象建模

🧱 5.1 用类实现功能

通过类建模可以表达宝可梦的名字、类型、等级、技能等。

public class Pokemon {
    private String name;
    private String type;
    private int level;
    private String[] moves;

    public Pokemon(String name, String type, int level, String[] moves) {
        this.name = name;
        this.type = type;
        this.level = level;
        this.moves = moves;
    }

    public void introduce() {
        System.out.println("名字:" + name + " 类型:" + type + " 等级:" + level);
        for (String move : moves) {
            System.out.println("- " + move);
        }
    }
}

📦 5.2 使用 record 简化类定义(Java 16+)

public record SimplePokemon(String name, String type, int level) {
    public boolean isStarter() {
        return level <= 10;
    }
}

🎯 5.3 总结与测试

概念 说明
建模 将现实世界的对象转化为类
record 简化的数据类定义
不可变性 保证对象状态不会被修改

🧬 第6章 揭开进化的秘密!继承的血统

📊 6.1 类图

继承关系可以通过类图展示,如皮丘 → 皮卡丘 → 雷丘:

Pokemon(父类)
  └─ Pikachu(子类)
       └─ Raichu(孙类)

🧪 6.2 继承的使用方法

public class Pokemon {
    String name;
    String type;

    public void introduce() {
        System.out.println("我是" + name + " 类型是" + type + "!");
    }
}

public class Pikachu extends Pokemon {
    int level;

    public void thunderbolt() {
        System.out.println(name + "使用了十万伏特!");
    }
}

📜 6.3 继承的规则

  • is-a 关系成立时可继承(如“皮卡丘是宝可梦”)
  • final 类不能被继承
  • sealed 类可限制继承类(Java 17+)

🎯 6.4 总结与测试

概念 说明
继承 子类从父类继承属性和方法
final 禁止进一步继承
sealed 限定允许继承的类(Java 17)

🌳 第7章 解开宝可梦家族之谜!深入继承关系

🌳 7.1 继承树

构建一个宝可梦继承家族树,如:

Pokemon
├── Meowth
│   └── Perrserker
└── Eevee
    ├── Vaporeon
    ├── Jolteon
    └── Flareon

🔗 7.2 构造函数的调用链

父类构造函数会先被调用:

public class Pokemon {
    public Pokemon(String name) {
        System.out.println(name + " 诞生了!");
    }
}

public class Eevee extends Pokemon {
    public Eevee() {
        super("伊布");
        System.out.println("伊布准备好了!");
    }
}

📁 7.3 将多个类写在一个文件中

public class Pokemon {
    String name;
    public void greet() {
        System.out.println("你好,我是" + name + "!");
    }
}

class Pikachu extends Pokemon {
    public Pikachu() {
        name = "皮卡丘";
    }
}

🛡 7.4 protected 修饰符

protected 表示可以在同一包或子类中访问。

🎯 7.5 总结与测试

概念 内容
Object类 所有类的祖先类
super() 调用父类构造函数
protected 限制访问范围到包和子类

🌀 第8章 宝可梦的变身术!引用的自动类型转换

🪄 8.1 引用的自动类型转换

Pokemon pika = new Pikachu("皮卡丘", 20);
pika.introduce();

子类对象可以赋值给父类类型变量,这就像百变怪变成了其他宝可梦。

🧱 8.2 向上转型与向下转型

  • 向上转型:子类 → 父类(自动)
  • 向下转型:父类 → 子类(需要强制转换)
Pikachu pika = (Pikachu) poke;

🔍 8.3 使用 instanceof 判断类型

if (poke instanceof Pikachu) {
    Pikachu pika = (Pikachu) poke;
}

🧠 8.4 使用 switch 判断类型(Java 14+)

switch (poke) {
    case Pikachu p -> p.thunderbolt();
    case Eevee e -> e.adapt();
}

🎯 8.5 总结与测试

概念 说明
向上转型 自动类型转换
向下转型 强制类型转换
instanceof 类型判断关键字
switch 表达式 Java 14 起支持类型模式匹配

🎭 第9章 一招多用!多态性的魔力

💡 9.1 方法重载(Overload)

同名方法根据参数不同执行不同逻辑。

public void attack(String move) { ... }
public void attack(String move, int times) { ... }

🔁 9.2 方法重写(Override)

子类重写父类方法,实现不同表现。

public class Pokemon {
    public void attack() { ... }
}

public class Pikachu extends Pokemon {
    @Override
    public void attack() {
        System.out.println("皮卡丘使用了十万伏特!");
    }
}

🌀 9.3 多态(Polymorphism)

父类变量调用子类方法,实现多种行为。

Pokemon poke = new Pikachu();
poke.attack(); // 实际调用子类方法

🎯 9.4 总结与测试

概念 说明
重载 同名不同参数的方法
重写 子类覆盖父类的方法
多态 运行时根据对象类型决定方法行为
动态绑定 在运行时决定调用哪个方法

🦄 第10章 幻之宝可梦的谜团!抽象类的世界

🧩 10.1 什么是抽象类

抽象类是“未完成的设计图”,不能被实例化。

public abstract class Pokemon {
    String name;
    String type;

    public void introduce() {
        System.out.println("我是 " + name + " 类型是 " + type);
    }

    public abstract void specialMove(); // 抽象方法
}

🧬 10.2 继承抽象类

子类必须实现所有抽象方法。

public class Mew extends Pokemon {
    public Mew() {
        name = "梦幻";
        type = "超能力";
    }

    @Override
    public void specialMove() {
        System.out.println("梦幻使用了精神强念!");
    }
}

🗺 10.3 抽象类的类图

<<abstract>> Pokemon
    +introduce()
    +specialMove() ← 抽象方法


        |
       Mew

🎯 10.4 总结与测试

概念 内容
抽象类 无法实例化的类
抽象方法 没有实现内容的方法
继承强制实现 子类必须实现抽象方法
中间抽象类设计 可以抽象继承链的一部分

🔗 第11章 宝可梦的属性与能力!接口的力量

💡 11.1 什么是接口(interface)

接口像“飞行属性”、“水属性”这样的能力说明书。

public interface Flyable {
    void fly(); // 所有实现者都必须实现该方法
}

🔁 11.2 类型转换为接口类型

Flyable flyingPokemon = new Charizard();
flyingPokemon.fly();

🎭 11.3 接口实现多态

public void useFly(Flyable f) {
    f.fly(); // 任意实现了接口的类都能飞
}

🌐 11.4 接口继承接口

public interface FlyingWaterType extends Flyable, WaterType {
    void dive();
}

🎯 11.5 总结与测试

概念 内容
接口 能力规范,所有实现者需遵守
implements 类实现接口
多重实现 一个类可以实现多个接口
接口多态性 可用接口类型调用具体实现

Discussion