Java面向对象的三大特征
封装(Encapsulation):
封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。
将一组逻辑相关的属性方法封装在类中,通过访问权限修饰符来隐藏内部细节,公开访问的接口的技术称为类的封装技术
好处:隐藏内部细节,保护其不受外部影响,方便内部的修改
同时降低外部使用的复杂度
属性用private隐藏,方法用public公开
继承(extends):
继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
*继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
子类继承父类
只能单继承
- 方法自动拥有,可实现代码复用
继承与构造器
- 原则:子类在创建对象时有义务先完成父类对象的构造
- 存在继承关系时,创建子类对象会先调用父类的默认无参构造器再调用子类的构造器,若不存在父类默认无参构造器则会报错。
- 或者通过super关键字显式的调用父类的其他构造器。
- super调用父类构造器时只能在子类构造器的第一行
多态(Polymorphism):
多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
- 概念:对外一种表现形式,对内多种表现形式
- 多态参数
- 方法的参数为父类或者接口时,可以传入父类及其子类或者接口的实现类
- 扩展性强
- 运行期类型和编译期类型
- Animal animal = new Cat();
- 运行期类型是Cat,编译期类型是Animal
- 编译时,会去Animal中检查是否有相应的属性和方法
- 运行时,执行Cat中的实现方法
- 多态环境下的属性和方法
- 针对属性,运行期使用父类的属性
- 针对静态方法,调用的是父类
- 针对成员方法,调用子类
多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现:
public interface Parent //父类接口
{
public void simpleCall();
}
public class Child_A implements Parent
{
public void simpleCall();
{
//具体的实现细节;
}
}
public class Child_B implements Parent
{
public void simpleCall();
{
//具体的实现细节;
}
}
//当然还可以有其他的实现
然后,我们就可以看到多态所展示的特性了:
Parent pa = new Child_A();
pa.simpleCall()则显然是调用Child_A的方法;
Parent pa = new Child_B();
pa.simpleCall()则是在调用Child_B的方法。所以,我们对于抽象的父类或者接口给出了我们的具体实现后,pa 可以完全不用管实现的细节,只访问我们定义的方法,就可以了。事实上,这就是多态所起的作用,可以实现控制反转