首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OOP 三大特性

OOP 三大特性

原创
作者头像
啦啦啦191
发布2025-10-14 18:05:44
发布2025-10-14 18:05:44
70
举报
文章被收录于专栏:Java开发Java开发

① 封装

定义:隐藏类的内部实现细节,只对外暴露 “访问接口”(通过 getter/setter 方法),保护数据安全。

访问修饰符:控制属性 / 方法的访问权限(从严格到宽松:private → default → protected → public)。

代码语言:java
复制
    // 私有属性(private:仅当前类可访问)
    private String username;
    private int age;

    // getter方法:获取私有属性值
    public String getUsername() {
        return username;
    }

    // setter方法:设置私有属性值(可添加校验逻辑)
    public void setUsername(String username) {
        this.username = username; // this表示“当前对象”
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        // 校验:年龄必须在0-120之间
        if (age >= 0 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("年龄输入错误");
        }
    }
}

// 使用封装后的类
public class EncapsulationDemo {
    public static void main(String[] args) {
        User user = new User();
        // user.username = "张三"; // 错误:private属性不能直接访问
        user.setUsername("张三"); // 通过setter设置值
        user.setAge(150); // 输出“年龄输入错误”(校验生效)
        user.setAge(25);
        System.out.println(user.getUsername() + ",年龄:" + user.getAge()); // 输出:张三,年龄:25
    }
}

② 继承

定义:子类(子类)继承父类(超类)的属性和方法,实现代码复用;Java 单继承(一个子类只能有一个父类),但支持多层继承。

关键字:extends(继承)、super(调用父类的属性 / 方法 / 构造器)。

代码语言:java
复制
// 父类(Animal)
class Animal {
    String name;

    // 父类构造器
    public Animal(String name) {
        this.name = name;
    }

    // 父类方法
    void eat() {
        System.out.println(name + "在吃东西");
    }
}

// 子类(Dog)继承父类(Animal)
class Dog extends Animal {
    // 子类构造器:必须先通过super()调用父类构造器(默认调用无参,若父类无无参构造,需显式调用)
    public Dog(String name) {
        super(name); // 调用父类的有参构造器
    }

    // 子类重写(Override)父类方法:方法名、参数列表、返回值完全一致
    @Override
    void eat() {
        super.eat(); // 调用父类的eat()方法
        System.out.println(name + "在吃骨头"); // 子类扩展逻辑
    }

    // 子类独有方法
    void bark() {
        System.out.println(name + "在叫:汪汪汪");
    }
}

// 测试继承
public class InheritanceDemo {
    public static void main(String[] args) {
        Dog dog = new Dog("小黑");
        dog.eat(); // 输出:小黑在吃东西 → 小黑在吃骨头(重写生效)
        dog.bark(); // 输出:小黑在叫:汪汪汪(子类独有方法)
    }
}

③ 多态

定义:同一行为(方法)在不同对象上有不同表现(如 “吃”:狗吃骨头,猫吃鱼);前提是 “继承 + 方法重写”。

实现形式:父类引用指向子类对象(Animal animal = new Dog())。

代码语言:java
复制
// 父类(Animal)和子类(Dog、Cat)同上,Cat类重写eat()方法为“吃小鱼干”

public class PolymorphismDemo {
    public static void main(String[] args) {
        // 多态:父类引用指向子类对象
        Animal animal1 = new Dog("小黑");
        Animal animal2 = new Cat("小白");

        // 调用eat()方法:实际执行的是子类重写后的方法(动态绑定)
        animal1.eat(); // 输出:小黑在吃骨头
        animal2.eat(); // 输出:小白在吃小鱼干

        // 注意:父类引用不能调用子类独有方法(如animal1.bark()错误),需“强制类型转换”
        if (animal1 instanceof Dog) { // instanceof:判断对象是否为某个类的实例
            Dog dog = (Dog) animal1; // 强制转换为Dog类型
            dog.bark(); // 输出:小黑在叫:汪汪汪
        }
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档