Java多态入门讲解(深入浅出)
来源:互联网 发布:蓝光播放软件 编辑:程序博客网 时间:2024/05/22 10:27
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面向对象入门讲解(深入浅出)
- 深入浅出讲解单例模式(java实现)
- 深入浅出讲解傅里叶变换(3)
- Java入门 之深入浅出吧
- java多态讲解
- java多态讲解
- 深入浅出Java入门 之 变量与常量(1)
- 深入浅出java入门 之 变量与常量(2)
- 深入浅出java入门 之 变量与常量(3)
- 深入浅出Java入门 之 运算符(2)
- 深入浅出Hibernate(一)实例讲解
- 深入浅出的讲解傅里叶变换(一)
- 深入浅出的讲解傅里叶变换(二)
- 深入浅出的讲解傅里叶变换(完整版)
- 深入浅出的讲解傅里叶变换(完整)
- 深入浅出讲解LDA主题模型(一)
- hello world!
- 20170725Linux下Makefile之三_动态链接库与静态链接库
- Theme属性详解
- Lock与synchronized 的区别
- 百度2017春招笔试真题编程题集合--不等式数列
- Java多态入门讲解(深入浅出)
- Picasso,Glide,Fresco比较
- Blockchain的鱼和熊掌系列(19) 之 pthread 线程库
- ActiveMQ深入浅出(五)——ActiveMQ将消息持久化到数据库
- 定时任务
- natapp使用
- nodejs 127.0.0.1 无法访问
- MySQL易忘常用的知识点
- cc.exports.*代替全局变量