1.多态
软件设计六大原则
1).单一职责原则
原则思想:一个方法只做一件事,一个类只负责一个职责,这样当前职责改动,不会对其他程序产生影响
常识原则,几乎所有的程序员都会遵守这个原则
优点:降低类和类之间的耦合度,提高可读性,可维护性,可扩展性,降低可变性的风险
2).里氏替换原则
原则思想:能使用父类的地方就一定可以使用子类
子类还可以扩展父类的功能,但是不能更改父类的功能,并且子类还可以有自己特有的功能
优点:增强了程序的健壮性即使有了新的子类原子类不受影响,可以正常执行
3).依赖倒置原则
原则思想:高层次不应该依赖低层次,都应该依赖于抽象
优点:拥抱多种变化,可以减少需求带来的工作量
4).接口隔离原则
原则思想:类和接口之间应该建立在最小的接口上
- .迪米特法则
原则思想:又称为最少知识原则,一个对象竟可能的少了解其他对象
6).开闭原则
原则思想:对修改关闭,对扩展开展
尽量可能通过软件实体来解决需求的变化,而不是通过修改已有的代码来完成变化
2.什么是多态:
多态就是里氏替换原则的一种体现,能使用父类的地方就一定可以使用子类
多类就是父类引用指向子类对象
父类引用:使用父类类型 创建的引用类型变量
指向:通过这个引用可以找到谁
通过父类创建的一个引用类型变量,找到了子类的对象
父类类型 变量名=new 子类();
3.怎么用
多态的几种形式:
1.直接多态: 父类 变量=new 子类();
2.形参/实参:参数列表用父类声明, 调用方法 , 传递子类对象
Public void m1(Animal a){}
m1(new Cat());
3.返回值多态:返回值类型是父类类型,但是但是返回的对象 是子类对象
4. 为什么这么用
多态的扩展性强
缺点
丢失了子类特有的属性
- 编译阶段和对象没有关系就算给变量赋值为null都可以,虽然会报空指针异常但是也可以运行,
6.向下转型
多态:又叫做向下转型 子类到父类是向上 父类到子类是向下 想要向下转型必须先发生向上转型
7.多态属性调用
父类没有的,都调用不了(因为多态缺点,丢失子类特有属性)
父类有的,子类没有的,执行父类
父类和子类都用,除了成员方法执行子类,其他全部执行父类
8.抽象
抽象类往往表示设计中得出的抽象概念 就是你声明的类太没有具体的属性值 比如说你声明一个动物类 类里有一个跑的方法 但是不同动物跑的方法不同 所以这个方法是不能具体化的.
Abstract :修饰符,修饰的是类的抽象类,修饰的方法是抽象方法
抽象方法:使用abstract修饰成员方法并且该方法没有方法体就是没有大括号
抽象类:不能被实例化,只能用于被继承
一般抽象类中只有功能的定义,但是没有功能的实现,子类必须覆写
抽象类和普通类几乎一样只有两点不同
1.不能创建对象2.可以抽象方法
非抽象类继承抽象类,必须实现所有的抽象方法
抽象类继承一个非抽象类,可以实现0~N个抽象方法
注意:
Abstract和final不能同时出现
Abstract修饰的类,是抽象类就是用来而被继承的 而final修饰的类不能被继承
Abstract修饰的方法是抽象方法, 而抽象方法就是被用来被覆写实现的,而final修饰的成员方法,不能被覆写
9.接口
引用数据类型:类,数组,接口
接口是一种引用数据类型,可以看做是一个特殊的类,为了解决java中单继承功能变弱问题
一个类只能继承一个父类,但是可以实现N个接口
1.[修饰符]interface接口名{}
2.1.8版本之前接口中只有抽象方法和常量(public static final)
3.接口中public static final 还有abstract都省略(接口中没有变量,只有常量,写个方法就是抽象方法)
4.接口没有构造方法,不能创建对象
5.一个类实现一个接口,需要实现所有的抽象方法
6.一个抽象类实现一个借口,需要实现0~N个抽象方法
1.8接口新特性
1.8之前只能有抽象方法
1.8开始 可以有静态方法和默认方法(可以理解为类的成员方法)
接口是不能创建对象的,但是可以发生多态
在接口里常量可以省略public static final直接写String 变量名=”xxxx”;
接口和接口之间是多继承,多个以逗号隔开
类和接口直接多实现,保留类继承,所以当抽象类和接口都满足需求的时候,优先使用接口
一个非抽象类实现接口后,需要实现所有抽像方法
一个抽象类实现接口后需要实现0~N个抽象方法