Java面向对象三个特征--封装、继承及多态
1、封装
1)为什么要封装?简单来说就是为了保证数据的安全性,以及隐藏复杂性(接口的具体实现),从而实现软件的灵活性、可维护性及可扩展性。
2)如何实现封装?隐藏实例变量,公开访问方法。
a)保护实例变量(使用private修饰符)。
b)创建公共的访问方法(比如getter()和setter())。
3)IS-A指继承或实现,使用extends关键字表达(不是implements)。
4)“IS-A” 、“继承自”以及“是...的子类型”是等价的。
5)HAS-A 指一个类的实例拥有另一个类(或同一个类)的实例的引用。
2、继承
1)继承就是允许一个类成为另一个类(父类)的子类,从而继承该父类公共及受保护的变量及方法。
2)继承是支持IS-A、重写、重载、强制转换及多态性的关键概念(基础)。
3)使用继承的理由?
a)促进代码复用(可以复用父类的公共成员)。
b)使用多态性(父类引用能指向子类的对象)。
3、多态性
1)多态性:父类的引用能指向子类的对象,从而能够接受多种形式的子类对象。
2)可以传递多个IS-A测试的Java对象都可以被看做是多态的。
3)访问对象的唯一方式是通过引用变量。
4)关于引用变量:
a)只能属于一种类型(引用类型本身不可变,但引用对象的类型可以改变)。
b)可以重新指向新的对象(除非被声明为final)。
c)引用变量能够引用与所声明引用的类型以及子类型的任何对象。
d)引用变量的类型(不是对象类型)决定在编译时可以调用哪些方法。
e)对象类型(不是引用类型)决定在运行时使用哪个重写(多态)的方法。比如Animal a=new Dog(),使用a调用eat()方法,如果Dog重写了Animal的eat()方法,则运行时则会调用Dog重写的eat()方法,否则永远只会调用Animal自身拥有的方法(因为它只能看到自己拥有的实例方法)。
推荐阅读