Java封装、继承、多态

1.封装

核心理念:【合理隐藏,合理暴露】

java 复制代码
package com.popo.fengzhuang;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    // Added age validation
    public void setAge(int age) {
        if (age < 0) {
            throw new IllegalArgumentException("Age cannot be negative.");
        }
        this.age = age;
    }
}

2.继承

子类能继承父类的非私有成员,子类对象由子类和父类共同完成

java 复制代码
package com.popo.jicheng;

public class People {
    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
java 复制代码
package com.popo.jicheng;

public class Student extends People {
    private String studentId;

    public String getStudentId() {
        return studentId;
    }
    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
}
java 复制代码
package com.popo.jicheng;

public class extendDemo1 {
    public static void main(String[] args) {
        // 子类对象由子类和父类共同完成,所以也有name和age属性
        Student student = new Student();
        student.setName("张三");
        student.setAge(18);
        student.setStudentId("001");
        System.out.println(student.getName() + " " + student.getAge() + " " + student.getStudentId());
    }
}

3.权限修饰符

4.多态

把子类对象赋值给父类变量,存在方法重写

java 复制代码
package com.popo.duotai;

public class People {
    String name = "People";

    public void run(){
        System.out.println("People is running");
    }
}
java 复制代码
package com.popo.duotai;

public class Student extends People {
    String name = "Student";

    @Override
    public void run() {
        System.out.println("Student is running");
    }
}
java 复制代码
package com.popo.duotai;

public class Teacher extends People {
    String name = "Teacher";

    @Override
    public void run() {
        System.out.println("Teacher is running");
    }
}
java 复制代码
package com.popo.duotai;

public class DuotaiDemo1 {
    public static void main(String[] args) {
        // 只讨论对象和行为的多态,不考虑变量的多态
        People p1 = new Teacher();
        // 编译看左边,运行看右边
        p1.run(); // 输出: Teacher is running
        System.out.println(p1.name); // 输出: People

        People p2 = new Student();
        p2.run(); // 输出: Student is running
        System.out.println(p2.name); // 输出: People
    }
}

如果要使用子类独有的方法,可以使用强制类型转换:子类型 变量 = (子类型)(new 父对象)

使用instanceof可以判断父对象是否与子类型对应

java 复制代码
package com.popo.duotai;

public class DuotaiDemo2 {
    public static void main(String[] args) {
        People p1 = new Teacher();

        People p2 = new Student();
        
        goRun(p1); // 输出: Teacher is running
        goRun(p2); // 输出: Student is running
    }

    public static void goRun(People p) {
        if (p instanceof Teacher) {
            Teacher t = (Teacher) p;
            t.run();
        } else if (p instanceof Student) {
            Student s = (Student) p;
            s.run();
        } else {
            p.run();
        }
    }
}
相关推荐
ly76891 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠1 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_307779131 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
奇牙coding2 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
爱读书的小胖2 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
小羊没烦恼!2 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
鸽鸽程序猿2 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
Lhappy嘻嘻2 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
黄俊懿2 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构