面向对象-封装继承多态

一、什么是封装?请详细解释。主要封装哪些内容?

①每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包装在类中,通过类的实例来实现。
②封装:隐藏对象的属性和实现细节,仅对外公开接口,并控制在程序中属性的读和修改的访问级别。

封装:要有装更要有封:把对象的属性和方法装在类中,还得封起来(访问修饰符的权限问题)

二、什么是继承?继承的主要目的是什么?继承与实现之间有什么关系?

1.继承定义了类如何相互关联,共享特性。
2.主要目的:为了更好的复用
3.继承是父类和子类之间的关系,实现是接口和实现类之间的关系。继承和接口都能实现代码重用,提高开发效率。


抽象类和接口的:
相同点:
①都是上层的抽象层
②抽象类和接口都不可实例化
③都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不比提供具体的实现。

不同点:抽象类和接口的区别

①抽象类中的方法可以有方法体,即抽象类中可以有非抽象方法,但是接口中的方法一定是抽象方法——接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

②抽象类有构造函数(不能被实例化),但是接口没有构造函数。
③抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。即接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

④接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。

⑤一个类只能继承一个抽象类,而一个类却可以实现多个接口。(敲黑板!!)——接口可以实现接口隔离
⑥实现接口的类必须要实现接口中的所有方法和属性。抽象类呢??请思考。

三、什么是多态,描述一下多态的主要用途,并用手写一段多态的代码。然后用语言描述你书写的多态语句。

1.多态:多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
2.主要用途:可以实现代码的可拓展性
3.请思考,下边代码体现多态了吗?


解释说明:上边的代码只体现了子类重写父类方法,还没体现多态,只有父类对象可以是不同的子类时才体现多态,如下图:

 

### 面向对象编程核心概念 #### 封装 封装是一种将数据(属性)和操作数据的行为(方法)绑定在一起的机制,同时隐藏对象内部的状态细节。通过访问控制符(如 `private` 或 `protected`),可以限制外界对对象内部状态的直接访问,从而保护对象的数据安全性和一致性[^3]。 以下是封装的一个典型例子: ```java public class Person { private String name; // 私有字段,防止外部直接修改 private int age; public void setName(String newName) { // 提供公共方法用于设置名称 this.name = newName; } public String getName() { // 提供公共方法用于获取名称 return this.name; } } ``` #### 继承 继承面向对象编程中的一个重要特性,表示一个类可以从另一个类派生出来。子类能够自动拥有父类的所有非私有成员变量和方法,并可以在需要时对其进行扩展或覆盖。这种机制有助于提高代码的复用性以及建立清晰的层次结构[^4]。 下面是一个简单的继承示例: ```java class Animal { protected String sound; public void makeSound() { System.out.println(sound); } } class Dog extends Animal { public Dog() { this.sound = "Bark"; } } ``` #### 多态 多态是指同一接口可以根据所引用的对象类型表现出不同的行为形式。其实现依赖于继承、方法重写以及运行时动态绑定技术。在 Java 中,可以通过父类引用指向子类对象的方式来体现多态性[^2]。 以下展示了如何利用多态实现灵活的操作: ```java abstract class Shape { abstract double getArea(); } class Circle extends Shape { private final double radius; public Circle(double r) { this.radius = r; } @Override double getArea() { return Math.PI * radius * radius; } } class Rectangle extends Shape { private final double width, height; public Rectangle(double w, double h) { this.width = w; this.height = h; } @Override double getArea() { return width * height; } } // 测试部分 Shape shape1 = new Circle(5); // 父类引用指向子类对象 System.out.println(shape1.getArea()); Shape shape2 = new Rectangle(4, 6); System.out.println(shape2.getArea()); ``` ### 总结 - **封装**:提供了一种信息隐蔽的方式,增强了安全性与模块化的程度。 - **继承**:支持代码共享与分层设计,减少了冗余并促进了逻辑上的分类管理。 - **多态**:增加了程序的灵活性与可扩展能力,使相同接口适用于多种情况下的不同处理过程。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ariel_欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值