Java 面向对象特性与多态面试题(7)
java 基础核心问题汇总:https://mp.weixin.qq.com/s/yKCUlvaL9GwgpvSjBtvihQ
https://mp.weixin.qq.com/s?__biz=MzI3ODc3NzQ4NQ==&mid=2247483745&idx=1&sn=4e9f6b78bb1419fd1f8aca5022986f1e&chksm=eb509a83dc27139593eeed2f840e5d849b2e9f5e00848e72ac409e1f1448953d3816e86db72e&scene=21#wechat_redirect
面向对象三大特性:封装、继承、多态
四种特性:封装、继承、多态、抽象
封装:把过程和数据包围起来,使得数据的访问只能通过已定义的接口,保证了对象被访问的隐私性和可靠性。------常见使用是private修饰成员变量,使用固定格式来使用成员变量。
关于数据的访问只能通过已定义的接口,对于这句话依旧存在疑惑。
public class EncapTest { //按照要求用,封装成员方法 private int s; private int ss; public int getS() { return s; } public void setS(int s) { this.s = s; } public int getSs() { return ss; } public void setSs(int ss) { this.ss = ss; } } public class RunEncap { public static void main(String args[]) { EncapTest encap = new EncapTest(); //使用的体现 encap.setS(55); encap.setSs(66); System.out.println("Name:" + encap.getS() + "Age:" + encap.getSs()); } }
继承性:类的一种层次模型,其提供了一种明确表述共性的方法,对象的新类可以从现有的类中继承派生,类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
子类使用父类的成员变量和方法,也可以修改使其更符合自己的需求,子类也可以新增方法,实现自己的新需求。子类对父类方法的重写成为重载。而一个类中,方法名相同,参数列表或者返回值不同成为重写。
class A { public String run(D obj) { return ("A & D"); } public String run(A obj){ return ("A & A"); } } class B extends A { public String run(B obj) { return ("B & B"); } public String run(A obj){ return ("B & A"); } } class C extends B {} class D extends B {} A aa = new A(); A ab = new B(); B b = new B(); C c = new C(); D d = new D();
//注意传入参数类型和调用对象 System.out.println(aa.run(b)); //1, A & A System.out.println(aa.run(c)); //2, A & A System.out.println(aa.run(d)); //3, A & D System.out.println(ab.run(b)); //4, B & A System.out.println(ab.run(c)); //5, B & A System.out.println(ab.run(d)); //6, A & D System.out.println(b.run(b)); //7, B & B System.out.println(b.run(c)); //8, B & B System.out.println(b.run(d)); //9, A & D /** 多态是对象在不同时刻表现出来的多种状态,是一种编译时期状态和运行时期状态不一致的现象。我们在编写或者分析代码时记住如下口诀: 成员变量:编译看左,运行看左(因为无法重写); 成员方法:编译看左,运行看右(因为普通成员方法可以重写,变量不可以); 静态方法:编译看左,运行看左(因为属于类);
*/
多态性是对象在不同时刻表现出来的多种状态,是一种编译时期状态和运行时期状态不一致的现象,多态性包括参数化多态性和包含多态性。
抽象性是指对一类事物的高度提炼以得到共同的共性部分,抽象不需要了解全部细节,而只是一种通用的描述约束,抽象可以是过程抽象或者数据抽象。
在开发中,对于必须实现的内容,使用接口来进行规范。
问:Java 多态的优缺点分别是什么?
答:多态的优点:
调用时可以直接使用父类的引用变量来调用子类的实现方法。
-
提高了代码的维护性(继承保证);
-
提高了代码的扩展性(由多态保证);
多态的缺点:
-
不能使用子类的特有功能(非要使用只能通过不优雅的创建子类对象方式,但是占用内存,其次就是使用强转类型,也容易出现问题);
-
向下转型(把父类转换为子类型)中有可能会出现异常;