1.将公共域(属性)和公共方法放在超类当中
在Java当中,超类当中存放的一般是子类所共有的属性和方法,也就是说,如果是不同子类有相
同的属性和行为的话,就可以将这些实例属性和方法放置在超类当中
实际上,在实际开发当中,有一部分静态变量也是存放在超类当中,供不同的子类所使用
2. 不要使用受保护权限修饰符protected去修饰超类供子类访问的属性
有一个误解:就是使用protected修饰符修饰超类的属性是一个不错的注意?
但是protected机制并不能够带来更好的保护的作用
原因在于:
1.在同包下,普通类和子类都能够访问到超类protected修饰的属性和方法
2.子类是无限制派生的,也就是说子类的子类仍然可以访问到protected修饰的域
3.使用继承实现“is a”的关系
如果两个类之间是“is a”的关系的话,那么就可以使用继承来关联两个类之间的关系
至于“is a”后面的类就是超类,前面的类就是子类
4.除非所有继承的方法都有意义,否则不要使用继承
在寻找两个类之间的关联关系的时候,应该判断到继承是否有需要实现,如果超类当中的方法在子类
当中可以通过别的途径实现或在子类当中没有实际意义的话,那么这两个类之间并不需要使用继承
5.在覆盖方法时,不要改变预期行为
超类当中的方法是可以被子类重写方法覆盖的,但是子类重写的方法必须跟超类所代表的意义
相一致或者是目的是一致的;
例子:超类当中有一个计算BMI指数的方法,在子类当中你就不能将这一个方法的目的(计算BMI
指数)改变,应该只能在原有的基础之上做出相应的改变(例如计算BMI指数并判断健康状况)
6.使用多态,不要使用instanceof运算符
多态使用场景:等号左边是超类引用,等号右边是new子类对象,并且前提是具备继承关系
多态使用的注意:多态使用的时候只能访问到从超类当中继承过来的方法,不能访问到子类特有的
方法,如果需要访问到子类特有的方法,可以使用强制类型转换来访问
7.不要过多使用反射
使用反射可以查看类的属性和方法的详细信息,但是反射机制并不适用于编写应用程序,反射是很
脆弱的,即是编译器很难帮助人们发现程序中的错误,任何错误只能在运行时才能发现,并导致异
常
8.超类的私有属性,子类是否能访问到
实际上,在有继承关系的条件下,子类是能够继承父类的私有属性和私有方法,但是子类当中无法
访问到父类的私有属性(就是子类能够获得但是不能使用)
但是,由于超类的封装特性,超类的私有属性的CRUD操作可以通过对外开发的操作入口执行,
所以子类当中可以通过开放的操作入口来对超类的私有属性间接访问