企业门户网站开发代码建平台需要投资多少钱
企业门户网站开发代码,建平台需要投资多少钱,wordpress 前台多余代码,网站搭建详细步骤一、封装 (Encapsulation)
1. 基本概念 将数据#xff08;属性#xff09;和操作数据的方法#xff08;行为#xff09;捆绑在一起 隐藏对象的内部实现细节#xff0c;仅对外提供公共接口
2. 实现方式
a. 访问修饰符
java public class BankAccount { // 私有字…一、封装 (Encapsulation)1. 基本概念· 将数据属性和操作数据的方法行为捆绑在一起· 隐藏对象的内部实现细节仅对外提供公共接口2. 实现方式a. 访问修饰符javapublic class BankAccount {// 私有字段 - 完全封装private double balance;private String accountNumber;// 公共方法 - 对外接口public void deposit(double amount) {if (amount 0) {balance amount;}}public boolean withdraw(double amount) {if (amount 0 balance amount) {balance - amount;return true;}return false;}// Getter方法 - 受控访问public double getBalance() {return balance;}}b. 封装的好处1. 数据保护防止外部直接修改内部数据2. 实现隐藏修改内部实现不影响外部调用3. 提高安全性通过验证逻辑保护数据完整性4. 降低耦合外部只依赖接口不依赖实现3. 设计原则· 最小化访问权限使用最严格的访问级别· 不变性尽可能使对象不可变· 防御性拷贝返回集合或对象的副本javapublic class Person {private final String name; // final确保不可变private final Date birthDate;public Person(String name, Date birthDate) {this.name name;// 防御性拷贝this.birthDate new Date(birthDate.getTime());}public Date getBirthDate() {// 返回副本而不是原始引用return new Date(birthDate.getTime());}}二、继承 (Inheritance)1. 基本概念· 子类继承父类的属性和方法· 实现代码复用和层次关系2. 继承类型a. 单继承java// 父类基类class Vehicle {protected String brand;protected int maxSpeed;public void start() {System.out.println(Vehicle starting...);}}// 子类派生类class Car extends Vehicle {private int numDoors;public Car(String brand, int maxSpeed, int numDoors) {this.brand brand;this.maxSpeed maxSpeed;this.numDoors numDoors;}// 方法重写Overridepublic void start() {System.out.println(Car starting with key...);}// 子类特有方法public void openDoors() {System.out.println(Opening numDoors doors);}}b. 多继承通过接口javainterface Flyable {void fly();}interface Swimmable {void swim();}class AmphibiousVehicle extends Vehicle implements Flyable, Swimmable {Overridepublic void fly() {System.out.println(Flying in the air);}Overridepublic void swim() {System.out.println(Swimming in water);}}3. 继承中的关键概念a. super关键字javaclass Parent {protected String name;public Parent(String name) {this.name name;}public void display() {System.out.println(Parent: name);}}class Child extends Parent {private int age;public Child(String name, int age) {super(name); // 调用父类构造器this.age age;}Overridepublic void display() {super.display(); // 调用父类方法System.out.println(Child age: age);}}b. 构造器调用链javaclass A {public A() {System.out.println(A constructor);}}class B extends A {public B() {// 隐式调用super()System.out.println(B constructor);}}class C extends B {public C() {// 隐式调用super()System.out.println(C constructor);}}// 创建C对象输出// A constructor// B constructor// C constructor4. 继承的设计原则· 里氏替换原则子类必须能够替换父类· 优先使用组合而非继承减少继承的脆弱性· 避免深度继承建议不超过3层三、多态 (Polymorphism)1. 编译时多态静态绑定a. 方法重载javaclass MathOperations {// 参数类型不同public int add(int a, int b) {return a b;}public double add(double a, double b) {return a b;}// 参数个数不同public int add(int a, int b, int c) {return a b c;}}2. 运行时多态动态绑定a. 方法重写javaabstract class Shape {protected String color;public Shape(String color) {this.color color;}// 抽象方法 - 必须由子类实现public abstract double area();// 具体方法 - 子类可以重写public void display() {System.out.println(Shape color: color);}}class Circle extends Shape {private double radius;public Circle(String color, double radius) {super(color);this.radius radius;}Overridepublic double area() {return Math.PI * radius * radius;}Overridepublic void display() {System.out.println(Circle: radius radius , color color);}}class Rectangle extends Shape {private double width, height;public Rectangle(String color, double width, double height) {super(color);this.width width;this.height height;}Overridepublic double area() {return width * height;}Overridepublic void display() {System.out.println(Rectangle: width x height , color color);}}b. 多态使用javapublic class TestPolymorphism {public static void main(String[] args) {// 向上转型Shape shape1 new Circle(Red, 5.0);Shape shape2 new Rectangle(Blue, 4.0, 6.0);// 多态调用shape1.display(); // 调用Circle的display()System.out.println(Area: shape1.area());shape2.display(); // 调用Rectangle的display()System.out.println(Area: shape2.area());// 多态在集合中的应用ListShape shapes new ArrayList();shapes.add(new Circle(Green, 3.0));shapes.add(new Rectangle(Yellow, 2.0, 4.0));for (Shape shape : shapes) {shape.display();System.out.println(Area: shape.area());}}}四、三大特征的关系与协作1. 协同工作示例java// 封装隐藏内部实现abstract class Employee {private String name;private int id;public Employee(String name, int id) {this.name name;this.id id;}// 封装getter方法public String getName() { return name; }public int getId() { return id; }// 抽象方法 - 多态的基础public abstract double calculateSalary();// 具体方法public void displayInfo() {System.out.println(ID: id , Name: name);}}// 继承复用基类代码class FullTimeEmployee extends Employee {private double monthlySalary;public FullTimeEmployee(String name, int id, double monthlySalary) {super(name, id);this.monthlySalary monthlySalary;}// 多态重写计算方法Overridepublic double calculateSalary() {return monthlySalary;}}class PartTimeEmployee extends Employee {private double hourlyRate;private int hoursWorked;public PartTimeEmployee(String name, int id, double hourlyRate, int hoursWorked) {super(name, id);this.hourlyRate hourlyRate;this.hoursWorked hoursWorked;}Overridepublic double calculateSalary() {return hourlyRate * hoursWorked;}}class ContractEmployee extends Employee {private double contractAmount;public ContractEmployee(String name, int id, double contractAmount) {super(name, id);this.contractAmount contractAmount;}Overridepublic double calculateSalary() {return contractAmount;}}// 使用三大特征public class PayrollSystem {private ListEmployee employees;public PayrollSystem() {employees new ArrayList();}public void addEmployee(Employee employee) {employees.add(employee);}// 多态统一处理不同类型的员工public void processPayroll() {for (Employee emp : employees) {emp.displayInfo();double salary emp.calculateSalary(); // 动态绑定System.out.println(Salary: $ salary);System.out.println(---);}}public static void main(String[] args) {PayrollSystem payroll new PayrollSystem();// 添加不同类型的员工payroll.addEmployee(new FullTimeEmployee(Alice, 101, 5000));payroll.addEmployee(new PartTimeEmployee(Bob, 102, 20, 80));payroll.addEmployee(new ContractEmployee(Charlie, 103, 3000));// 统一处理payroll.processPayroll();}}2. 设计模式中的应用a. 模板方法模式java// 封装算法框架abstract class DataProcessor {// 模板方法 - 定义算法骨架public final void process() { // final防止子类修改算法结构loadData();transformData();saveData();cleanup();}// 具体步骤 - 部分由子类实现protected abstract void loadData();protected abstract void transformData();// 默认实现protected void saveData() {System.out.println(Saving data to database...);}protected void cleanup() {System.out.println(Cleaning up resources...);}}// 继承和多态class CSVProcessor extends DataProcessor {Overrideprotected void loadData() {System.out.println(Loading CSV data...);}Overrideprotected void transformData() {System.out.println(Transforming CSV data...);}}class XMLProcessor extends DataProcessor {Overrideprotected void loadData() {System.out.println(Loading XML data...);}Overrideprotected void transformData() {System.out.println(Transforming XML data...);}Overrideprotected void saveData() { // 重写保存方式System.out.println(Saving data to cloud storage...);}}五、面向对象设计原则1. SOLID原则· S - 单一职责原则一个类只负责一个功能领域· O - 开闭原则对扩展开放对修改关闭· L - 里氏替换原则子类必须能替换父类· I - 接口隔离原则使用多个专门的接口· D - 依赖倒置原则依赖抽象不依赖具体2. 结合三大特征的应用java// 依赖倒置示例interface MessageSender {void send(String message);}// 具体实现class EmailSender implements MessageSender {Overridepublic void send(String message) {System.out.println(Sending email: message);}}class SMSSender implements MessageSender {Overridepublic void send(String message) {System.out.println(Sending SMS: message);}}// 高层模块依赖抽象class NotificationService {private MessageSender sender;// 依赖注入public NotificationService(MessageSender sender) {this.sender sender;}public void notifyUser(String message) {sender.send(message); // 多态调用}}// 使用NotificationService emailService new NotificationService(new EmailSender());NotificationService smsService new NotificationService(new SMSSender());六、常见面试问题1. 三大特征的区别与联系· 封装是基础隐藏实现细节· 继承是手段实现代码复用· 多态是目的提高灵活性2. 为什么说多态是面向对象的核心· 提高代码扩展性· 实现接口统一· 支持运行时动态绑定3. 继承 vs 组合java// 继承 - is-a关系class Car extends Vehicle { }// 组合 - has-a关系class Car {private Engine engine; // 组合private ListWheel wheels; // 聚合}4. 如何选择继承还是实现接口· 需要共享代码使用继承· 需要定义行为规范使用接口· 需要多继承使用接口七、实际开发建议1. 封装建议· 所有字段设为private· 使用final修饰不可变字段· 提供必要的getter/setter· 考虑使用建造者模式处理复杂对象2. 继承建议· 遵循里氏替换原则· 避免超过3层的继承深度· 优先考虑组合而非继承· 考虑使用抽象类定义模板3. 多态建议· 面向接口编程· 使用工厂模式创建对象· 考虑策略模式替换条件语句总结面向对象三大特征构成了面向对象编程的核心1. 封装保护内部状态提供稳定接口2. 继承实现代码复用建立类层次关系3. 多态提供灵活性支持运行时动态行为三者相辅相成共同支撑起面向对象的设计思想。在实际开发中应该根据具体场景灵活运用这些特征遵循面向对象设计原则构建出高内聚、低耦合、可维护、可扩展的软件系统。