[JAVA学习笔记] 类与对象 - 多态
多态
概念
多态使对象在接受方法调用时能知道调用哪个方法实现。多态是同一个行为具有多个不同表现形式或形态的能力,就是同一个接口,使用不同的实例而执行不同操作,如图所示:
现实中,比如我们按下 F1 键这个动作:
- 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
- 如果当前在 Word 下弹出的就是 Word 帮助;
- 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
优点
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
必要条件
- 继承
- 重写
- 父类引用指向子类对象:
Parent p = new Child();
实现方式
- 方式一:重写
- 方式二:接口
- 方式三:抽象类和抽象方法
实例
//Demo1 - 重写
class Fruit{
public void eat(){
System.out.println("Fruit Can Eat!");
}
}
class Apple extends Fruit{
public void red(){
System.out.println("Apple is Red!");
}
}
public class FruitDemo{
public static void main(String[] args){
Fruit aApple = new Apple();
aApple.eat(); //Apple类中没有eat方法,所以会调用Fruit类中的eat方法
}
}
//Demo2 - 重写
class Fruit{
public void eat(){
System.out.println("Fruit Can Eat!");
}
}
class Apple extends Fruit{
public void eat(){
System.out.println("Apple Also Can Eat!");
}
public void red(){
System.out.println("Apple is Red!");
}
}
public class FruitDemo{
public static void main(String[] args){
Fruit aApple = new Apple();
aApple.eat(); //Apple中存在eat方法,此时调用的是Apple类中的eat方法
}
}
//Demo3 - 接口
interface Hack {
public void scan();
}
//HackingOne与HackingMore分别实现了不同的scan方法
class HackingOne implements Hack{
public void scan(){
System.out.println("Started Scan Target:192.168.0.1");
}
}
class HackingMore implements Hack{
public void scan(){
System.out.println("Started Scan Targets:192.168.0.0/24");
}
}
public class Hacking{
public static void main(String[] args){
HackingOne test1 = new HackingOne(); //调用HackingOne的scan方法
test1.scan();
HackingMore test2 = new HackingMore(); //调用HackingMore的scan方法
test2.scan();
}
}
[ * ]博客中转载的文章均已标明出处与来源,若无意产生侵权行为深表歉意,需要删除或更改请联系博主: 2245998470[at]qq.com