Java函数知识点大全(三)

简介: 教程来源 https://ljtgc.cn/ 本文系统讲解Java面向对象核心机制:构造方法(含无参、有参、私有、拷贝及构造器链)、方法重写规则与@Override注解、抽象类与接口方法(含默认/静态/私有方法)及函数式接口,辅以典型代码示例,助你深入掌握Java OOP精髓。

七、构造方法

7.1 构造方法基础

public class ConstructorDemo {

    private String name;
    private int age;

    // 1. 无参构造器
    public ConstructorDemo() {
        this.name = "默认";
        this.age = 0;
    }

    // 2. 有参构造器
    public ConstructorDemo(String name) {
        this.name = name;
        this.age = 0;
    }

    // 3. 全参构造器
    public ConstructorDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 4. 私有构造器(单例模式、工具类)
    private ConstructorDemo(int id) {
        // 私有构造器
    }

    // 5. 拷贝构造器
    public ConstructorDemo(ConstructorDemo other) {
        this.name = other.name;
        this.age = other.age;
    }
}

7.2 构造器链

public class ConstructorChainDemo {

    private String a;
    private String b;
    private String c;

    // 使用this()调用其他构造器
    public ConstructorChainDemo() {
        this("默认A");  // 必须放在第一行
    }

    public ConstructorChainDemo(String a) {
        this(a, "默认B");
    }

    public ConstructorChainDemo(String a, String b) {
        this(a, b, "默认C");
    }

    public ConstructorChainDemo(String a, String b, String c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}

// 构建器模式(替代多参数构造器)
public class Person {
    private final String name;
    private final int age;
    private final String email;

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.email = builder.email;
    }

    public static class Builder {
        private String name;
        private int age;
        private String email;

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder age(int age) {
            this.age = age;
            return this;
        }

        public Builder email(String email) {
            this.email = email;
            return this;
        }

        public Person build() {
            return new Person(this);
        }
    }

    // 使用示例
    public static void main(String[] args) {
        Person person = new Person.Builder()
            .name("张三")
            .age(25)
            .email("zhang@example.com")
            .build();
    }
}

八、方法重写

8.1 重写规则
方法重写(Overriding):子类重新实现父类的方法。
重写规则:
方法名、参数列表必须相同
返回值类型必须是父类返回类型的子类型(协变返回)
访问修饰符不能比父类更严格
不能重写final方法
不能重写静态方法(隐藏而非重写)

class Animal {
    public String sound() {
        return "动物发出声音";
    }

    protected Animal getInstance() {
        return new Animal();
    }

    public final void cannotOverride() {
        System.out.println("不能被重写");
    }

    public static void staticMethod() {
        System.out.println("父类静态方法");
    }
}

class Dog extends Animal {

    // 重写父类方法
    @Override
    public String sound() {
        return "汪汪汪";
    }

    // 协变返回类型
    @Override
    public Dog getInstance() {
        return new Dog();
    }

    // 无法重写final方法

    // 方法隐藏(不是重写)
    public static void staticMethod() {
        System.out.println("子类静态方法");
    }
}

8.2 @Override注解

public class OverrideAnnotationDemo {

    // @Override的作用:
    // 1. 编译时检查是否正确重写
    // 2. 提高代码可读性

    class Parent {
        public void method1() {}
        public void method2() {}
    }

    class Child extends Parent {
        @Override
        public void method1() {}  // 正确重写

        // @Override
        // public void method3() {}  // 编译错误:没有重写任何方法

        @Override
        public void method2() {}  // 正确重写
    }
}

九、抽象方法与接口方法

9.1 抽象方法

// 抽象类
public abstract class Shape {

    // 抽象方法:没有方法体
    public abstract double area();

    public abstract double perimeter();

    // 抽象类可以有具体方法
    public void display() {
        System.out.println("面积: " + area());
        System.out.println("周长: " + perimeter());
    }
}

// 具体子类必须实现所有抽象方法
class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }

    @Override
    public double perimeter() {
        return 2 * Math.PI * radius;
    }
}

class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double area() {
        return width * height;
    }

    @Override
    public double perimeter() {
        return 2 * (width + height);
    }
}

9.2 接口方法

// 接口中的方法(Java 8+)
public interface MyInterface {

    // 1. 抽象方法(默认public abstract)
    void abstractMethod();

    // 2. 默认方法(Java 8)
    default void defaultMethod() {
        System.out.println("默认方法");
        privateMethod();  // 可以调用私有方法
    }

    // 3. 静态方法(Java 8)
    static void staticMethod() {
        System.out.println("静态方法");
    }

    // 4. 私有方法(Java 9)
    private void privateMethod() {
        System.out.println("私有方法");
    }

    // 5. 私有静态方法(Java 9)
    private static void privateStaticMethod() {
        System.out.println("私有静态方法");
    }
}

// 函数式接口(只有一个抽象方法)
@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);

    // 可以有多个默认方法
    default void log() {
        System.out.println("计算完成");
    }

    // 可以有多个静态方法
    static Calculator add() {
        return (a, b) -> a + b;
    }

    static Calculator multiply() {
        return (a, b) -> a * b;
    }
}

来源:
https://ljtgc.cn/article/332.html

相关文章
|
10天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11192 104
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
10天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
5827 136
|
8天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
2007 6
|
6天前
|
人工智能 自然语言处理 供应链
【最新】阿里云ClawHub Skill扫描:3万个AI Agent技能中的安全度量
阿里云扫描3万+AI Skill,发现AI检测引擎可识别80%+威胁,远高于传统引擎。
1409 3
|
7天前
|
人工智能 Linux API
离线AI部署终极手册:OpenClaw+Ollama本地模型匹配、全环境搭建与问题一站式解决
在本地私有化部署AI智能体,已成为隐私敏感、低成本、稳定运行的主流方案。OpenClaw作为轻量化可扩展Agent框架,搭配Ollama本地大模型运行工具,可实现完全离线、无API依赖、无流量费用的个人数字助理。但很多用户在实践中面临三大难题:**不知道自己硬件能跑什么模型、显存/内存频繁爆仓、Skills功能因模型不支持工具调用而失效**。
3389 7