刚刚学习了继承,记录下我觉得继承中我们应该注意的问题.
什么继承是使用extends来实现的,这种问题记录下来是不是有点降低哥的IQ呢?哈哈,所以这些基础语法就不记录咯.下面开始吧:
1.在学习java中,我们应该要知道所有类的超类都是object类,这样说的意思就是说,所有的类都包含了object这个类的成员,所以
我们在编码的时候要恰当的利用这个类中的成员.大家有时间还是多去看看帮助文档,了解下这个object类.我简单的说说这个类
吧.
在这个类中有一个无参的构造方法,大家是不是在想,既然所有类是继承object类,而我们知道在继承的概念里,是不能继承父类的
构造方法的,为什么还要提供这样一个构造方法呢?这里就引发出了另一个问题了,在继承当中虽然不能继承父类的构造方法,但是
我们创建子类对象,在调用子类构造方法的时候,这个时候是先去调用父类的构造方法,大家想想,这个时候如果父类没有构造方法
,那程序会出现什么样的错误?这里编译使不能通过的,这就是object里的无参构造方法存在的意义.
在object里面有一个很常用的方法toString();这个方法默认是返回对象的 包名.类名+@+hashCode码,具体实现是:getClass
().getName() + '@' + Integer.toHexString(hashCode()) ; 这个实现对我们来说是没用意义的,所以一般我们在使用的时候是
重写这个方法.
在object里面还有一个常用的方法equals();这个方法用于比较指示某个其他对象是否与此对象“相等”.
另一个就是getClass();这个用于返回一个对象运行时的类的模版,也就是所谓的反射机制.
其他的方法,需要做了解,至少在需要的时候能查到.
2.继承中需要注意的第二点:
如果B继承于A,且C继承于B,且满足B IS-A A,C IS-A B的关系,那么这时候的C也具有了A当中的成员,这里因该考虑的问题是
private修饰的是不能被继承的.
3.在继承的时候我们应该尽量少使用protected(受保护的),虽然protected最大权限是父类和子类的关系可以访问,但是同一个包
中还是可以访问的,为了尽量完善程序的封装性,所以尽量少使用.
4.继承:使得相同的代码可以在不同类型之间得到复用.
多态:使得不同的代码可以以一种相同的方式得到调用.
继承可以做为复用的手段,但这不是继承的最大意义,继承的最大意义在于封装变化的代码,将变化的代码和不变的代码进行剥
离,使得代码的维护性,扩展性,重用性得增强.
继承分为extends和implements.
在子类重写方法时,要注意到这有可能是在修改父类,违背LSP. 子类应该进可能去实现一个抽象方法,而不是去重写一个具体
方法.
什么继承是使用extends来实现的,这种问题记录下来是不是有点降低哥的IQ呢?哈哈,所以这些基础语法就不记录咯.下面开始吧:
1.在学习java中,我们应该要知道所有类的超类都是object类,这样说的意思就是说,所有的类都包含了object这个类的成员,所以
我们在编码的时候要恰当的利用这个类中的成员.大家有时间还是多去看看帮助文档,了解下这个object类.我简单的说说这个类
吧.
在这个类中有一个无参的构造方法,大家是不是在想,既然所有类是继承object类,而我们知道在继承的概念里,是不能继承父类的
构造方法的,为什么还要提供这样一个构造方法呢?这里就引发出了另一个问题了,在继承当中虽然不能继承父类的构造方法,但是
我们创建子类对象,在调用子类构造方法的时候,这个时候是先去调用父类的构造方法,大家想想,这个时候如果父类没有构造方法
,那程序会出现什么样的错误?这里编译使不能通过的,这就是object里的无参构造方法存在的意义.
在object里面有一个很常用的方法toString();这个方法默认是返回对象的 包名.类名+@+hashCode码,具体实现是:getClass
().getName() + '@' + Integer.toHexString(hashCode()) ; 这个实现对我们来说是没用意义的,所以一般我们在使用的时候是
重写这个方法.
在object里面还有一个常用的方法equals();这个方法用于比较指示某个其他对象是否与此对象“相等”.
另一个就是getClass();这个用于返回一个对象运行时的类的模版,也就是所谓的反射机制.
其他的方法,需要做了解,至少在需要的时候能查到.
2.继承中需要注意的第二点:
如果B继承于A,且C继承于B,且满足B IS-A A,C IS-A B的关系,那么这时候的C也具有了A当中的成员,这里因该考虑的问题是
private修饰的是不能被继承的.
3.在继承的时候我们应该尽量少使用protected(受保护的),虽然protected最大权限是父类和子类的关系可以访问,但是同一个包
中还是可以访问的,为了尽量完善程序的封装性,所以尽量少使用.
4.继承:使得相同的代码可以在不同类型之间得到复用.
多态:使得不同的代码可以以一种相同的方式得到调用.
继承可以做为复用的手段,但这不是继承的最大意义,继承的最大意义在于封装变化的代码,将变化的代码和不变的代码进行剥
离,使得代码的维护性,扩展性,重用性得增强.
继承分为extends和implements.
在子类重写方法时,要注意到这有可能是在修改父类,违背LSP. 子类应该进可能去实现一个抽象方法,而不是去重写一个具体
方法.