Java的三大特性之多态__渣渣的Java学习之路
来源:互联网 发布:淘宝卖家手写卡片内容 编辑:程序博客网 时间:2024/05/29 09:49
多态
指把类中具有相似功能的不同方法使用同一个方法名来实现,从而可以使用相同的方式来调用这些具有不同功能的同名方法
多态的几种表现形式:
方法重载与多态
继承、重写与父类指向子类对象实现多态
接口指向实现类对象
1.方法重载与多态
下面是一个例子,child给animal喂食
public class test { public static void main(String[] args) { Child child = new Child(); Dog dog = new Dog(); Cat cat = new Cat(); Pig pig = new Pig(); child.feed(cat); child.feed(dog); child.feed(pig); }}
Child类
public class Child { /** * 对于feed,必然要面对不同的animal,当传入的对象不同时必然不能用同一个方法,因此利用重载使得不同的对象都可以传入 * 当然此处也可以去掉animal类,不使用继承与重写,直接使用dog,pig,cat三个类的对象 */ //对feed进行重载,可以传入不同动物的对象 public void feed(Dog dog){ dog.eat(); } public void feed(Cat cat){ cat.eat(); } public void feed(Pig pig){ pig.eat(); }}
Animal父类
public class Animal { public void eat(){ System.out.println("Animal eat..."); }}
Dog,Pig,Cat类继承Animal类并重写eat方法
public class Dog extends Animal{ @Override//强制检索是否重写 public void eat(){//对父类方法的重写 System.out.println("Dog eat..."); }}
public class Pig extends Animal { @Override//强制检索是否重写 public void eat(){//对父类方法的重写 System.out.println("Pig eat..."); }}
public class Cat extends Animal{ @Override//强制检索是否重写 public void eat(){//对父类方法的重写 System.out.println("Cat eat..."); }}
这个小例子中通过重载实现了多态。
2.继承、重写与父类指向子类对象实现多态
事实上在上面的小例子中Child可以通过父类指向子类对象的方式达到不用方法重载。只需把Child类做一点小修改。
public class Child { /** * 将父类的对象作为了方法的参数,因此animal的所有子类的对象全部都可以传入 * 又因为子类都对feed方法进行了重写,所以调用的时候优先使用子类。 * 这样没有过多的重载 */ public void feed(Animal animal){ animal.feed(); }}
修改后
Test.java文件
public class Test { public static void main(String[] args) { Child child = new Child(); Dog dog = new Dog(); Cat cat = new Cat(); Pig pig = new Pig(); child.feed(cat); child.feed(dog); child.feed(pig); } }
Child.java文件
Child.java文件public class Child { public void feed(Animal animal){ animal.feed(); }}
public class Animal { public void feed(){ System.out.println("Animal eat..."); }}
public class Dog extends Animal{ @Override public void feed(){ System.out.println("Dog eat..."); }}
public class Cat extends Animal{ @Override public void feed(){ System.out.println("Cat eat..."); }}
public class Pig extends Animal{ @Override public void feed(){ System.out.println("Pig eat..."); }}
父类指向子类对象达到多态的小结
父类指向子类对象的,那么只能使用父类中定义好的方法而不能使用子类特有的方法
父类指向子类对象的,若果重写了父类的方法就调用子类重写的方法而不会调用父类的
当父类作为方法的参数时那么就能能传入所有子类对象(就象上面Child类的feed方法)
当一个方法的返回对象是父类时,那么久能返回所有子类对象
将上面的Test类和Child类修改,就达到上面的第四条:
public class Test { public static void main(String[] args) { Child child = new Child(); Dog dog = new Dog(); Cat cat = new Cat(); Pig pig = new Pig(); child.feed(cat); child.feed(dog); child.feed(pig); child.feed2(cat).feed(); child.feed2(dog).feed(); child.feed2(pig).feed(); } }
public class Child { /** * 将父类的对象作为了方法的参数,因此animal的所有子类的对象全部都可以传入 * 又因为子类都对feed方法进行了重写,所以调用的时候优先使用子类。 * 这样没有过多的重载,减少了代码量 */ public void feed(Animal animal){ animal.feed(); } public Animal feed2(Animal animal){//新加入的Animal返回类型方法 return animal; }}
3.接口指向实现类对象
public class Test { public static void main(String[] args) { Test test = new Test(); USB U1 = new Car(); USB U2 = new Mp3(); USB U3 = new Game(); U1.run(); U2.end(); U3.run(); }}
一个USB接口
public interface USB { public void run(); public void end();}
对接口进行实现的MP3,Car,Game类
ublic class Mp3 implements USB{ public void run(){ System.out.println("Play Music"); } public void end(){ System.out.println("Stop Music"); }}
public class Car implements USB{ public void run(){ System.out.println("car is starting!"); } public void end(){ System.out.println("Car is stop!"); }}
public class Game implements USB{ public void run(){ System.out.println("play game"); } public void end(){ System.out.println("stop game"); }}
在这个小例子中通过利用接口的一个特性(一个接口可以有多个实现),实现了多态
这些就是今天学长讲完多态后,我的一点小总结,有理解错误的地方烦请帮忙指正一下。
阅读全文
0 0
- Java的三大特性之多态__渣渣的Java学习之路
- java的三大特性之多态
- java的三大特性之多态
- java的三大特性之多态
- java面向对象的三大特性之多态
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- 理解 Java 的三大特性之多态
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- 面向对象的三大特性之多态-java版
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- 理解java的三大特性之多态
- Java学习笔记(34)--理解java的三大特性之多态
- java基础之33三大特性之多态
- 《OpenGL v3.3》——(1)搭建glfw3与glew环境,并创建第一个窗口
- centos7下xgboost,python安装
- 第二章 第五节 :唯一约束UNIQUE KEY
- ios 跳系统设置页面
- HDU 1166 敌兵布阵
- Java的三大特性之多态__渣渣的Java学习之路
- Sublime_text2快捷键
- iOS C语言之基础知识
- mysql Sort aborted: Query execution was interrupted
- [UVa 1610] 聚会游戏(Party Games)
- Java 正则表达式之江湖小虾米篇
- java 集合类深入理解
- tcp 状态转换图以及问题点
- 事件分发机制