虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持,即 “抽象、封装、继承、多态” :
– 抽象,先不考虑细节
– 封装,隐藏内部实现
– 继承,复用现有代码
– 多态,改写对象行为
封装:
(1)使类中的成员变量的修饰符为private,并提供public方法访问该成员变量。
(2)访问器方法:允许获取成员变量的get方法
修改器方法:允许修改成员变量的set方法
(3)封装的好处:
1)成员变量可以成为只读或只写
2)类可以对储存在其成员变量中的内容有一个整体的控制
3)类的用户不需要知道类是如何存储数据的
多态:
(1)是指一个对象有多种形式的能力,一个类的子类可以定义他们唯一的行为,同时共享父类的某些相同的特征。
1)静态多态:在程序编译时发生
实现方式: 方法重载
规则:依据对象在定义时的类型相应的调用对应类中的重载方法
2)动态多态:在运行时发生
实现方式: 重写父类的同名成员的方法
调用规则:依据对象在实例化时的类型,相应的调用对应类中的同名成员的方法
(2)多态的技术基础:
1)向上转型技术:一个父类的引用变量可以指向不的子类对象
2)instanceof关键字:用于判断运行时对象的真正类型(Java语言的多态机制导致了引用变量的声明类型和实际引用对象的类型可能不一致,因 此引用instanceof运算符)
3)动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法
向上转型:由低精度类型转为高精度类型实行自动转换
向下转型:由高精度类型转为低精度类型需使用强制类型转换符
抽象:
(1)抽象方法:只声明了方法,同时使用了abstract修饰,没有方法体。必须要子类来重写
(2)抽象类:可以避免子类设计的随意性,将设计和实现分开。
1,有抽象方法的类只能定义抽象类。
2,抽象类不能实例化,即不能用new来实例化抽象类。
3,抽象类可以包含属性,方法,构造方法。
4,抽象类只能用来继承。
5,抽象方法必须被子类实现。
继承:
通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。已有的称为父类(超类),新的类称为子类。
(1)继承的优点:
1)代码的可重用性
2)父类的属性的方法可用于子类
3)子类可扩展父类的属性和方法
4)设计应用程序变得更加简单
(2)继承的单根性:在Java中一个类只能有一个父类
(3)继承的传递性:一个Java类可以父类,父类也可以有父类
(4)所有类的根类:Object类,又叫基类或超类。Object类是每个Java类的父类,要么是直接的父类,要么就是间接的父类。
(5)方法重写:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。该行为方法生在子类中,对父类方法重写。
(6)super 关键字:子类想要给继承的方法添加行为,但并不完全替换父类的方法。(默认情况下,子类构造器会调用父类的无参构造方法)
(7)final 关键字:当不希望一个类被继承是则在class前加上关键字final。final关键字可以出现在返回值类型之前的任意位置,习惯上是放在访 问修饰符之后。
1)final类:一个类可以声明为最终类的 。 最终类不能被继承。
2)final方法:一个方法可以声明为最终的 。 最终方法不能被重写。
(8)abstract关键字:使用关键字abstract可以声明一个抽象类,该关键字可以出现在类声明时class关键字前的任何地方。当类没有实例化必要 时,可将该类改为抽象类。
(9)抽象方法:
1)没有方法主体;
2)必须出现在抽象类中;
3)在子类中必须被重写,除非子类也是抽象类。
接口:
(1)定义:
1)接口中全都是抽象方法,不能被实例化;
2)类不能继承接口,只能“实现”接口所定义的方法;
(2)接口与类:
1)相似之处:
①接口可以有任意数量的方法;
②接口保存以“ .Java ”为后缀名的文件,接口名需要与文件名匹配;
③接口编译后是后缀名为“ .class ”的字节码文件;
④在包中的接口,其相应的字节码文件必须放置在和包名称相匹配的一个目录结构中。
2)不同之处:
①接口不能被实例化;
②接口不包含任何构造器;
③接口中所有的方法都是抽象的;
④接口中不能包含实例成员变量,唯一可以出现在接口中的成员变量必须是同时声明为static和final,即公有静态常量;
⑤接口不能被一个类继承,只能被一个类实现;
⑥一个接口能够继承多个接口。
(3)接口具有以下性质:
1)接口默认是抽象的;
2)接口的中每一个方法默认也是抽象的;
3)接口中的方法默认访问级为public。
(4)接口使用原则:
1)使用接口解决多继承;
2)使用接口为外部类添加功能;
3)面向对象的角度考虑,量一个类与生俱来的特征和行为和依赖于外部的可选特征和行为分离。
(5)类实现接口有2个选择:
1)实现接口中所定义的所有方法;
2)声明自己为抽象类。 使用关键字implements类实现接口,该关键字放在类声明的extends部分之后
(6)使用接口的好处:
1)将设计和实现分离,对外隐藏了实现;
2)面向接口编程是OOP的核心。