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

相关文章
|
Java 数据处理
【十二】springboot整合WebService
【十二】springboot整合WebService
1546 0
|
7月前
|
Java API
Java函数知识点大全(四)
教程来源 https://dnuhf.cn/ 本文系统讲解Java函数式编程核心:Lambda表达式(含语法、方法引用四种形式)、常用函数式接口(Predicate/Function/Consumer等)、Stream API(中间/终端操作、分组聚合)、异常处理技巧及方法设计最佳实践,涵盖从基础到高级的完整知识体系。
|
7月前
|
druid 安全 Java
网站后端连接数据库知识点大全(一)
教程来源:https://dnuhf.cn/article/162.html 本文系统梳理Web后端数据库连接核心知识:涵盖JDBC原理、主流驱动配置、PreparedStatement防注入、批处理;深入解析HikariCP、Druid、Tomcat JDBC三大连接池;详解Spring中数据源配置、JdbcTemplate及多数据源实践,助开发者构建高效、安全、稳定的数据库访问体系。
|
7月前
|
Java 数据库连接 数据格式
【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
本文系统梳理Java主流注解体系,涵盖Spring核心组件(@Component、@Service等)、依赖注入(@Autowired、@Resource)、Web开发(@RestController、@PathVariable)、配置启动(@SpringBootApplication、@Configuration)、MyBatis/Plus、事务AOP(@Transactional、@Aspect)及测试等八大类,辅以对比表格及思维导图。
【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
|
7月前
|
Java
Java函数知识点大全(二)
教程来源 https://www.xcfsr.cn/category/software-dev.html 本节详解Java核心编程技术:递归(含阶乘、斐波那契、汉诺塔等经典案例及尾递归、记忆化优化)、静态方法(工具类、工厂模式、单例实现)与实例方法(this用法、链式调用)。内容精炼实用,适合深入理解面向对象编程精髓。
|
机器学习/深度学习 人工智能 自然语言处理
抖音封号是什么原因造成的?
抖音封号的技术逻辑与风控体系解析
|
11月前
|
数据采集 安全 数据挖掘
Python字符串统计:从基础到进阶的实用指南
本文系统介绍Python字符串统计技巧,涵盖长度计算、字符与单词计数、子串查找、频率分析及文件处理等场景,结合代码示例讲解基础方法与进阶优化,助你高效应对数据分析、文本处理等实际需求。
1217 0
|
设计模式 Java 编译器
Java的带参数和不带参数的构造方法以及作用
Java的带参数和不带参数的构造方法以及作用
680 3
|
存储 人工智能 缓存
SpringBoot离线应用的5种实现方式
在网络依赖日益加深的今天,离线应用的重要性不断上升。本文介绍了基于SpringBoot实现离线应用的五种方式,重点讲解了嵌入式数据库的实现原理与步骤,包括本地数据存储、操作缓存、资源本地化和状态管理等核心功能,分析了其优缺点及适用场景,帮助开发者在无网络环境下构建稳定可靠的应用。
563 0
|
移动开发 编解码 缓存
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】
1618 0
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】

热门文章

最新文章