面试真题打卡(五)

本文详细阐述了面向对象的三大特征——封装、继承和多态的原理与应用。封装强调数据隐藏和预设访问方式,增强代码维护性;继承实现代码复用和扩展,但也可能增加耦合性;多态提高代码灵活性和维护性,需基于继承关系、方法重写和父类引用子类对象。同时,讨论了重载与重写的不同,重载发生在同一类内,而重写发生在父类与子类间,构造方法不能重写,但可重载。最后,介绍了Java的访问修饰符及其作用范围。

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

一、说说你对面向对象的理解

面向对象的三大基本特征是:封装、继承、多态。其中,封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,让外部程序通过该类提供的方法来实现对内部信息的操作和访问,这种做法有助于规范使用者的行为,让使用者只能通过事先预定的方法访问数据,提高了代码的可维护性;继承是面向对象实现代码复用的重要手段,Java通过extends作为关键字实现类的继承,实现继承的类被称为子类,被继承的类称为父类(有的也被称为积累和超类),父类和子类的关系是一种一般和特殊的关系;多态的是实现离不开继承,在设计程序是,我们可以将参数的类型定义为父类型。在调用程序时,则可以根据实际情况,传入该父类型的某个子类型的实例,这样就实现了多态。对于父类型,可以有三种形式,即普通的类、抽象类、接口。对于子类型,则要根据它自身的特征,重写父类的某些方法,或实现抽象类/接口的某些抽象方法。 

加分回答                                                                                                                                            通过封装可以实现这些优点:- 隐藏类的成员变量和实现细节,不允许外部直接访问。  - 规范使用者的行为,让使用者只能通过事先预定的方法访问数据,通过在这个方法中加入逻辑控制,限制使用者对成员变量的不合理访问。- 可进行数据检查,从而有利于保证对象信息的完整性;- 便于修改,提高代码的可维护性。                                                                                                                       用继承的优点包括:- 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性,提高了代码复用;- 提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类来完成的。               用继承的缺点:- 继承是慢入性的。只要继承,就必须拥有父类的所有属性和方法;- 降低代码的灵活性,子类必须拥有父类的属性和方法。- 增强了耦合性。当父类的常量、变量、和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能会导致大段地代码需要重构。多态地优点:- 提高了代码的维护性。- 提高了代码的扩展性。                                                          java中实现多态需要三个条件:1、需要有继承关系的存在。2、需要有方法的重写。3、需要有父类的引用指向子类对象。

二、请你说说重载和重写的区别,构造方法能不能重写

重载要求发生在同一个类中,多个方法之间的方法名相同且参数列表不哦她那个。注重重载与方法的返回值以及访问修饰符无关。重写发生在父类子类中,若子类方法想要和父类方法构成重写关系,则它的方法名、参数列表必须与父类方法相同。另外,放回值要小于等父类方法,抛出的异常要小于等于父类方法,访问修饰符则要大于等父类方法。若父类方法的访问修饰符为private,则子类不能对其重写。其实除了两者都发生在方法之间,要求方法名相同之外并没有太大相同点。        加分回答    同一个类中有多个构造器,多个构造器的形参列表不同就被称为构造器重载,构造器重载让Java类包含了多个初始化逻辑,从而允许使用不同的构造器来初始化对象。构造方法不能重写。因为构造方法需要和类名方法保持同名,而重写的要求是子类方法要和父类方法保持同名。如果允许重写构造方法的话,那么子类中将会存在与类名不同的构造方法,这与构造方法的要求是矛盾的。父类方法和子类方法之间也有可能发生重载,因为子类会获得父类的方法,如果子类中定义了一个与父类方法名字相同但参数列表不同的方法,就会形成子类方法和父类方法的重载。

三、请介绍一下访问修饰符

Java除了提供的三个访问修饰符分别代表三个访问级别之外还有一个不加修饰符的访问级别,它们访问级别控制从小到大为:private->default->protected->public他们访问级别分别如下:private:类中被private修饰的成员只能在当前类的内部被访问。根据这点,我们可以使用它来修饰成员变量,从而将成员变量隐藏在这个类的内部。default:如果类中的成员或者一个外部类不适用任何访问修饰符来进行修饰,那么他就是default级别的,default访问控制的类成员或者外部类可以被相同包下的其他类访问。protected:如果一个类成员被protected修饰,那么通常是希望它的子类来重写它。public:这是Java中最宽松的访问级别,如果类成员被这个修饰符修饰,那么无论访问类和被访问类在不在一个包下,有没有访问父子关系,这个类成员都可以被访问到。                            加分回答    对于局部变量而言,它的作用域就是他所在的方法,不可能被其它类所访问,所以不能使用访问修饰符来修饰。对于外部类而言,它只有两种控制级别:public和默认,外部类没有处于任何类的内部,所以就没有他所在类的内部,所在类的子类两个范围,protected和private没有意义。使用public声明的外部类可以被所有类引用;不使用访问修饰符创建的外部类只有同一个包内的类能引用。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值