(2).基于接口实现的多态
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就可能是通过实现接口并覆盖接口中同一方法的几不同的类体现的。
在接口的多态中,指向接口的引用必须是指定实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。
三、多态的存在条件
1、有继承
2、要有重写
3、父类的引用指向子类的对象:自动向上转型
四、多态中的访问特点
1.成员变量的调用
编译的时候看左边 运行的时候也看左边
2.指向子类的父类引用只能访问父类中拥有的方法和属性
3.若子类重写了父类中的某些方法,在调用这些方法的时候,必定是使用子 类中定义的方法
4.对于子类中存在而父类不存在的方法,该引用是不能使用的
结论:实例字段、静态字段、静态方法在编译期间就实行了静态绑定,而实例方法则实行的是动态绑定。
五、多态评价
1.好处和作用:
多态的存在提高了程序的扩展性和后期可维护性。
2.弊端:
父类调用的时候只能调用父类中的方法,不能调用子类的特有方法,因为父类并不清楚将来会有什么样的子类继承。
六.多态练习
package zhou;
public class Father {
static int a=66;//静态字段
int b=99;//实例字段
public void c() {//实例方法
System.out.println("c=96");
}
public static void d(){//实例方法
System.out.println("d=100");
}
}
package zhou;
public class Son extends Father{
static int a=88;//静态字段
int b=69;//实例字段
int e=51;//实例字段
public void c() {//实例方法
System.out.println("c=56");
}
public static void d(){//实例方法
System.out.println("d=60");
}
public void f() {//实例方法
System.out.println("f=89");
}
}
package zhou;
public class Test1 {
public static void main(String[] args) {
Father f=new Son();//向上转型
System.out.println("a="+f.a+" b="+f.b);
f.c();//动态绑定
f.d();//静态绑定
Son s=new Son();
s.f();//直接调用son里面的f,也可以输出输出son里面的实例字段e;
}
}
总目录展示
该笔记共八个节点(由浅入深),分为三大模块。
高性能。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。
一致性。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。
高可用。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。
篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),麻烦各位转发一下(可以帮助更多的人看到哟!)
由于内容太多,这里只截取部分的内容。
外链图片转存中…(img-NkCF2RbP-1719268449765)]
[外链图片转存中…(img-lWf8vWoP-1719268449765)]
由于内容太多,这里只截取部分的内容。