Java有三大特性继承、封装、多态
继承
- 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
- 子类拥有父类非private的属性和方法。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- 我们知道,构造器是不能被继承的,只许被调用!
需要注意的是,子类是依赖于父类的(这也说明了一个弊端,即继承是一种强耦合关系),子类拥有父类的非private属性和方法(弊端二:破坏了封装),所以父类应先于子类被创建。
所以当父类没有默认构造器时,子类需要指定一个父类的构造器,并且写于子类构造器的第一行!当然父类有默认构造器,子类就无需super了,Java会自动调用。
- 再说protected关键字。插一句,只有合理使用访问修饰符,程序才能更好的为我们服务!
对于子类,为了使用父类的方法,我们可以修改它的访问修饰符为protected,而不是一股脑儿的写上public!一劳永逸的做法可能会带来更大的危害!
而对于类的成员变量,继续保持它的private!
- 最后是向上转型了,它是一个重要的方面。从上面的的代码中,我写上了Person person = new Yang(“yang”, “male”, 23); 这样结果是将Yang向上转型为Person,带来的影响可能就是属性和方法的丢失,但是它将是安全的。
同时它最大的作用是…..子类能够提供父类更加强大的功能以适用于不同的场合,完成不同的操作。
不太清楚可以看看这两个: List
我们知道ArrayList是数组实现,查找更快;而LinkedList是链表实现,添加元素和删除元素效率更好!
但是向上转型有一个弊端,指向子类的父类引用因为向上转型了,它将只拥有父类的属性和方法,同时子类拥有而父类没有的方法,是无法使用了的!
所以,继承实现了软件的可重用性和可拓展性。但是Java是单继承的,并且继承也有多个弊端(上面有提),其实还有一个弊端是父类一旦改变,子类可能也得进行改变!所以慎用吧。
封装
- 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法(getter,setter),如果不想被外界方法,我们大可不必提供方法给外界访问。
- 封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。
- 可以对成员变量进行更精确的控制。(在setter方法中进行实际意义的校验)
对于封装的思想,我们需要尽可能的隐藏内部细节,只保留一些对外操作。
多态
多态性就是不同的子类型可以对同一个请求做出不同的操作。同时多态性分为编译时多态性和运行时多态性,对应着方法重载overload和方法重写override!
对于方法重写,存在在继承中。它作为运行时多态性的表现,首先需要子类继承和实现父类的方法,然后向上转型,父类引用子类对象,对同一件事作出不同的响应。
方法重写时,需要注意的是子类的访问修饰符的访问范围不能小于父类,如父类的一个方法修饰符为protected,那么子类继承时,只能选用public或者protected。除了访问修饰符,其余完全相同于父类!
对于方法重载,出现在同一个类中,它是编译时多态性的表现。定义为:同名的方法如果有不同的参数列表便视为重载。
最后有一道经典的题目作为结尾
|
|