面向对象的三大核心特性:
- 封装性
- 继承性
- 多态性
一、多态的定义
是指同一行为,具有多个不同表现形式。
二、多态的实现条件
- 实现继承关系:实现继承关系,是将两个类建立起必要的联系,通过这种联系,展现不同的引用形态。
- 重写父类方法:重新父类方法,是根据不同子类的不同情况,通过方法重写实现展示效果的不同,效果不同,就展示了类的不同形态。
- 父类的引用指向子类的对象:通过对父类引用的实例化,实例化出不同的子类对象,最终实现类的多种形态的展示。
示例代码:
飞机类
/**
* 飞机类
*
*/
public class Airplane {
public int wing;//飞机机翼数量
public String engine;//发动机型号
/**
* 飞机用途方法
*/
public void purpose() {
System.out.println("我是一架飞机,我能起飞");
}
}
轰炸机,继承飞机类
/**
* 轰炸机
*
*/
public class Bomber extends Airplane{
public int ammunition;//导弹数量
/**
* 轰炸机用途方法
*/
public void purpose() {
System.out.println("我是一架轰炸机,我能发射导弹");
}
}
民用客机,继承飞机类
/**
* 民用客机
*
*/
public class Aircraft extends Airplane{
public int guest;//载客人数
/**
* 民用客机用途方法
*/
public void purpose() {
System.out.println("我是一架民用客机,我能承载普通客人");
}
}
测试类
public class Test {
public static void main(String[] args) {
Aircraft aircraft=new Aircraft();//实例化民用客机类对象
Bomber bomber=new Bomber();//实例化轰炸机类对象
Airplane airplane=null;//创建飞机类引用
airplane=aircraft;//将民用客机对象赋值给飞机类引用
airplane.purpose();//调用飞机用途方法
airplane=bomber;//将轰炸机对象赋值给飞机类引用
airplane.purpose();//调用飞机用途方法
}
}
输出结果
三、多态的好处
使用多态,我们可以很好的完成代码的解耦合工作,加强代码的可扩展性,使代码更加灵活,在不改变原有方法的情况下使类的可用性提高,灵活性增强。
- 降低模块的耦合度
- 增强可以类的可替换性
- 增强模块的可扩展性
- 增强模块的灵活性
四、对象转型
向上转型
父类的引用指向子类的对象,称为向上转型。 作用是:提高程序的扩展性。
public class Test {
public static void main(String[] args) {
Aircraft aircraft=new Aircraft();//实例化民用客机类对象
Bomber bomber=new Bomber();//实例化轰炸机类对象
Airplane airplane=null;//创建飞机类引用
airplane=aircraft;//将民用客机对象赋值给飞机类引用(向上转型)
airplane.purpose();//调用飞机用途方法
airplane=bomber;//将轰炸机对象赋值给飞机类引用(向上转型)
airplane.purpose();//调用飞机用途方法
}
}
向下转型
将子类的引用指向了父类的对象,该写法是对象的向下转型;向下转型不是自动的,需要强制类型转换符进行转换。作用:实现子类扩展方法的调用。
public class Test {
public static void main(String[] args) {
Aircraft boeing747=new Aircraft();//实例化子类对象
Airplane plane=boeing747;//将子类对象赋值给父类引用(向上转型)
Aircraft boeing_747=(Aircraft)plane;//将父类对象赋值给子类引用(向下转型)
boeing_747.purpose();//调用子类方法
}
}
instanceof关键字
instanceof是Java中的一个二元运算符,用来测试一个对象是否为一个类的实例。
public class Test {
public static void main(String[] args) {
Airplane airplane=new Bomber();
System.out.println(airplane instanceof Airplane);
System.out.println(airplane instanceof Bomber);
System.out.println(airplane instanceof Aircraft);
}
}
五、面向对象的三大特性总结
面向对象的三大特性,为封装、继承、多态。个人认为,继承是三大特性的核心。封装是将代码进行整合,封装后增加代码的聚合度;继承是建立了类与类之间的关系,建立了耦合度;多态是通过重写方式实现不同效果的展示,降低了耦合度。三大特性是一个整体,虽然可以独立使用,但是相互配合,整合起来的代码,更有优势和效果,真正的去实现了代码的高内聚,低耦合。