java语言基础(三)----面向对象的三大特征

本文详细阐述了面向对象编程的三大核心特征:封装、继承和多态。通过具体实例介绍了这些概念的应用及其优缺点,帮助读者理解面向对象编程的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.面向对象的三大特征

(1)封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。

(2)继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

          通过继承创建的新类称为“子类”或“派生类”。

          被继承的类称为“基类”、“父类”或“超类”。

          继承的过程,就是从一般到特殊的过程。

          要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

          在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

优点:1.提高代码的复用性2.让类与类之间产生关系,给多态提供前提。

缺点:打破了封装性。

  单继承:一个子类只能有一个直接父类

  多继承:一个子类可以有多个直接父类。但是java中不允许出现,会出现不确定性,因为多个父类可能有相同成员。

   在Java中可以用多实现来解决问题(实现多个接口),或者多层继承。

注意:当本类中的成员和局部变量同名用this区分

           当子类与父类成员变量同名用super区分。this代表一个本类对象引用,super代表一个父类空间。

 

当子类与父类出现一模一样的成员函数,会运行子类的函数,这种现象称为覆盖操作。

覆盖注意事项:子类覆盖父类方法时,子类权限必须大于父类权限。 静态只能覆盖静态。

 

什么时候执行覆盖操作?   当对一个子类进行扩展时,子类需要保留父类的功能声明,但又要定义子类中该功能的特有内容时,就要使用覆盖操作来完成。

 

为什么子类实例化的时候要访问父类的构造函数?    子类继承了父类,获取了父类的属性,所以在使用父类内容前要先看父类是                                                                                     如何对自己内容初始化的。

(3)多态:指允许不同类的对象对同一消息作出响应。即同一消息可以根据发送对象的不同而采取多种不同的行为方式。(消息指的就是函数调用)

  前提:继承,重写,父类只想子类对象。

作用:消除类型之间的耦合关系。

优点:提高扩展性,后期可维护性。

Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

在java中,多态大致可以分为以下几种情况:

1)person为父类,student为子类。那么:person p=new student();

2)fliable为接口,bird为实现接口的类,那么:fliable f=new bird();

3)fliable为抽象类,bird为继承fliable的类,那么:fliablef=new bird();

多态时需要说明p声明为父类的引用,但他实际为子类引用。但是他只能调用父类中的方法。如果子类中的方法覆盖了父类方法,那么将调用父类方法(虚方法调用)。接口多态也是同样的,也许你会问,如果f要调用自己的方法,那岂不是出错了?其实这里也是方法的覆盖,因为实现接口的子类肯定会实现接口中的方法, 所以此种情况下调用的是bird中的方法。但是如果bird有一个方法在接口中没有定义,那么f不能调用。

那么如果我声明了person p=new student();我想将p转为student的可不可以?当然可以,但是就得强制转换了(儿子想成为父亲直接来,父亲想成为儿子你就强来)。也称为向下转型。通常用instanceof判断对象的具体类型。

                如:if(p instanceof student) { student s=(student)p;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值