[置顶] Java多态入门讲解(深入浅出)
2017-07-25 11:17
162 查看
Java三大特性之一 (多态)
什么是多态(核心概念):多态就是指同一操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果。
(考虑到文字讲解会不会有点抽象,下面用代码来演示更直观些)
在写代码前我先说两个死公式(没有为什么,反正就死公式):
(重点一)
多态存在的三个必要条件:
1、需要存在继承关系。 既:子类要继承父类 (结论:继承是实现多态的基础)
2、需要存在实现关系。 既:子类要重写父类的方法 (结论:要有方法的重写)
3、父类引用指向子类对象。 既:(父类) Animal obj = new (子类) Dog (); (结论:父类数据类型的引用指向子类对象)
(重点二)
多态的作用:
1、多态消除了类型之间的耦合关系。
既:Animal obj = new Dog (); 父类 Animal 指向子类 Dog (); 就由 Dog (); 对象来实现 Animal 里面的方法
既:Animal obj = new Cat (); 父类 Animal 指向子类 Cat (); 就由 Cat (); 对象来实现 Animal 里面的方法
总结:父类指向谁就由谁来实现父类里面的方法,类型之间相互独立不受彼此的影响,所以说多态消除了类型之间的耦合关系。
2、多态的存在提高了程序的扩展性和后期的可维护性。
既:Animal obj = new Dog (); 父类 Animal 指向子类 Dog (); 就由 Dog (); 对象来实现 Animal 里面的方法
既:Animal obj = new Cat (); 父类 Animal 指向子类 Cat (); 就由 Cat (); 对象来实现 Animal 里面的方法
总结:父类指向谁就由谁来实现父类里面的方法,不仅提高了代码的扩展性也提高了代码的可维护性。
3、多态通过分离做什么(父类)和怎么做(子类),从另一个角度将接口和实现进行分离。
/**
* 创建一个父类 Animal (动物)
*/
public class Animal {
public void eat(){
System.out.println("动物具有吃的能力");
}
}
/**
* 创建一个子类 Dog (狗)并继承父类 Animal (动物)
*/
public class Dog extends Animal {
@Override
public void eat() { // 子类重写了从父类继承过来的方法
System.out.println("狗具有吃骨头的能力");
}
public void attack() { // attack 是子类独有的方法,不是从父类继承过来的
System.out.println("狗具有攻击的能力");
}
}
/**
* 创建一个子类 Cat (猫) 并继承父类 Animal (动物)
*/
public class Cat extends Animal {
// 子类 Cat 什么都没有,只是单单的从父类继承了所有的东西过来
}
/**
* 主程序类 Test
*/
public class Test {
public static void main(String[] args) {
Animal obj = new Animal(); // 父类的引用指向本类的对象
a.eat(); // 调用的是本类的方法
Animal obj2 = new Dog(); // 父类的引用指向子类的对象
d.eat(); // 调用的是子类重写后的方法(程序会优先调用子类重写过的方法)
// d.attack(); //父类的引用指向子类的对象,不能调用子类独有的方法。只能调用它跟父类有关联的方法
Animal obj3 = new Cat(); // 父类的引用指向子类的对象
c.eat(); // 调用的是从父类继承过来的方法
}
}
执行结果如下:
动物具有吃的能力
狗具有吃骨头的能力
动物具有吃的能力
相关文章推荐
- [置顶] Java封装入门讲解(深入浅出)
- [置顶] Java面向对象入门讲解(深入浅出)
- [置顶] JAVA从零单排4-----继承、封装和多态详解
- java语言讲解singleton的编程思想---深入浅出单实例Singleton设计模式
- Spring MVC 入门示例讲解 - howtodoinjava
- Java菜鸟逆袭之入门篇(附讲解)
- 深入浅出Java入门 之 变量与常量(1)
- 深入浅出java入门 之 方法的重载
- 黑马程序员_java入门_main函数的讲解
- JavaSE入门学习18:Java面向对象之多态
- [置顶] 自定义java Annotation快速入门与提高
- 黑马程序员-----java入门一DAY10------类的设计分析 面向对象多态 构造代码块
- Spring MVC 入门示例讲解 - howtodoinjava
- [置顶] Java开发入门必学:html5和CSS
- [置顶] JavaSE学习笔记_5:Java多态
- Java入门系列:实例讲解ArrayList用法
- Java入门第10章接口继承与多态
- Java中的多态的详细讲解
- Java中的多态的详细讲解
- Java入门笔记-(面向对象:封装,多态,继承)