SRP : simple responsibility principle (简单责任)-------------------不建议把一个Class写的过大
如User类中可以有 public void addUser(User u);
public void updateUserInfo(User u);
public void deleteUser(String uid);
public void changePassword(String uname,String pwd);
注意:OOP的优点是代码重用,要尽量不修改代码
类的粒度不能过小(给编写和维护带来困难),粒度也不能过大(给代码重用带来困难)
OCP: open close principle (开闭原则)
对扩展性的需求一定是open的
对原有功能的代码修改是close的
//课后作业,看看其它OO设计的原则
业务实体类: Tiger Dog Cat
业务场景类: PegDoctor Game
多态:
业务方法传入的是父类的引用,调用传参是具体的不同的子类实现;
方法体内所有子类对象执行的是相同的方法,产生的行为结果是各不相同的--->>所以称这种现象为多态
多态的本质就是子类和父类之间的继承关系,已经方法的重写技术;
父类与子类之间的类型转换:
Printer p3 = new ColorPrinter("p003"); //子转父,是安全的。因为它不存在内存越界的问题;
//父转子是危险的,所以需要用instanceof进行判断。这种情况会可能出现内存越界
练习:
1.什么是多态,使用多态有什么好处?
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
编译时多态(设计时多态):方法重载。
运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态)
2.实现多态的两个要素? 1. 方法重写 2. 使用父类类型
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
3. class Base {
}
class Sub extends Base {
public String getFields() {
String name = "Sub";
return name;
}
}
class DoSub {
public static void main(String[] args) {
Base b = new Sub();
// 插入语句处
}
}
在插入语句处插入那条代码能够输出Sub?System.out.println(((Sub)b).getFields());
4.(判断)父类对象所能够看见方法是本类之中所定义的方法(及被子类覆盖的方法)。如果子类扩充了一些新的方法,那么父类对象是可以找到的。(X)
5.(判断)被关键字static修饰的静态方法是不能被覆盖的。(V)
6.为什么说父转子是危险的? 内存越界。
7.方法重载和覆写的区别?
区别 |
重载 |
覆写 |
定义 |
方法名称相同,参数的类型及个数和顺序至少一个不同 |
方法名称、参数的类型及个数、返回值类型完全相同 |
范围 |
只发生一个类之中 |
发生在类的继承关系中 |
权限 |
不受权限控制 |
被覆写的方法不能拥有比父类更严格的访问控制权限。 |
8. 一般Java程序的类体由两部分组成:一部分是_属性_,另一部分是_方法_
9.子类对父类继承来的属性重新定义称为__重写__。子类对自身拥有的同名方法的重新定义称_重载___。
10. this指_当前对象___,super指_父对象___。