好看的创意网站设计,百度百科优化,wordpress釆集插件破解,上海网站推广行业需求前言
关于 “” 和 equals() 的区别这个问题#xff0c;我之前一直搞的很乱#xff0c;虽然面试的时候一直没有被问到#xff0c;但是我感觉这种是属于最基础的知识#xff0c;如果不懂好像不是很好。后来我发现通过这个问题#xff0c;可以串联起很多的知识点#xff0…前言
关于 “” 和 equals() 的区别这个问题我之前一直搞的很乱虽然面试的时候一直没有被问到但是我感觉这种是属于最基础的知识如果不懂好像不是很好。后来我发现通过这个问题可以串联起很多的知识点所以我觉得可以写一篇文章来总结一下顺便把这个问题涉及的知识点总结梳理一下。 “” 与 equals() 的区别
对于这个问题我们首先要知道“”是一个符号而equals()是一个方法。这就意味着equals()方法里面可以使用“”。“”的本质其实是判断两个对象的地址是否相等而equals()里面用了“”所以在没有重写的情况下equals()也是用来判断两个对象地址是否相等的若equals()重写就要看重写后的方法要判断啥了。 重载和重写
说到重写那我们就来顺便说一下方法重写和方法重载。之前我在面试的时候也有被问到过方法重载指的是同一个类当中有很多名字相同的方法但它们的参数不同用来定义相似的功能。而方法重写是子类继承父类后重写父类的方法。方法重写一般和多态有关系。 多态
既然重写和多态有关系那我们就顺便再来聊聊多态。多态是面向对象的三大特性之一。我之前面试的时候面试官问过我叫我介绍一下面向对象的特性我关于封装和继承都讲的挺好的就是多态不太好解释当时感觉 也是没理解我自己当时说的自己都听不懂估计面试官也听不懂。我今天趁着这个机会又重新梳理了一下。
我还是举电商支付双系统项目的例子来说明。在支付模块里我想提供多种支付方式让用户选择。所以我会写一个payment父类然后声明支付方法pay()。接着我又写了很多子类比如微信支付子类支付宝支付子类来重写这个pay()方法的具体逻辑。这样无论用户选择哪种支付方式我都可以通过统一的pay接口来执行具体的pay操作。
abstract class Payment {public abstract void pay();
}class CreditCardPayment extends Payment {Overridepublic void pay() {System.out.println(进行信用卡支付);}
}class CashPayment extends Payment {Overridepublic void pay() {System.out.println(进行现金支付);}
}class MobilePayment extends Payment {Overridepublic void pay() {System.out.println(进行移动支付);}
}public class Main {public static void main(String[] args) {Payment creditCardPayment new CreditCardPayment();Payment cashPayment new CashPayment();Payment mobilePayment new MobilePayment();creditCardPayment.pay(); // 输出: 进行信用卡支付cashPayment.pay(); // 输出: 进行现金支付mobilePayment.pay(); // 输出: 进行移动支付}
}
一句话总结多态就是通过抽象类和方法重写来实现多态这种思想。