希望各位新手程序员可以通过我这个博客学会多态。(尽量短一点)

多态体现形式:父类的引用指向自己的子类对象。 (简单理解:父类的方法被子类同名方法覆盖)
多态的前提:类之间必须有关系,要么基础,要么实现,存在覆盖。
多态的好处:提高程序的扩展性。
多态的弊端:只能使用父类中的成员。

打个比方,动物有小猪,小猫,小猪,小猫都是动物。
我们可以:

小猫 xx=new 小猫();
小猪 xx=new 小猪();
和下面的
动物 xx=new 小猪();
动物 xx=new 小猫();
是一个效果。
动物可以作为小猪,也可以作为小猫,这就是多态。

气死我了,上代码:

package duotai;abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat() {System.out.print("小猫吃东西");}
}
class Pig extends Animal{public void eat() {System.out.print("小猪吃东西");}
}
public class duotai {public static void main(String[] args) {Cat cat=new Cat();Pig pig=new Pig();cat.eat();pig.eat();}
}
输出是:小猫吃东西小猪吃东西

下面写一个同样结果的程序:

package duotai;abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat() {System.out.print("小猫吃东西");}
}
class Pig extends Animal{public void eat() {System.out.print("小猪吃东西");}
}public class duotai {public static void eat(Animal a) {a.eat();}public static void main(String[] args) {Animal cat=new Cat();Animal pig=new Pig();//这叫向上转型,子类向父类转。eat(cat);eat(pig);}
}
这个输出是:小猫吃东西小猪吃东西

但是猪喜欢睡觉动物不是都喜欢睡觉,那小猪想表达睡觉怎么办?
气死我了,上代码。

package duotai;abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat() {System.out.print("小猫吃东西");}
}
class Pig extends Animal{public void eat() {System.out.print("小猪吃东西");}public void sleep(){System.out.print("小猪在睡觉");}
}
public class duotai {public static void main(String[] args) {Animal pig=new Pig();pig.sleep();}
}
这个代码会报错的。因为Animal建立的Pig对象没有sleep函数/

气死我了上解决方法:

package duotai;abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat() {System.out.print("小猫吃东西");}
}
class Pig extends Animal{public void eat() {System.out.print("小猪吃东西");}public void sleep(){System.out.print("小猪在睡觉");}
}public class duotai {public static void main(String[] args) {Animal pig=new Pig();Pig a=(Pig)pig;//向下转型a.sleep();}}
这样就好了。输出小猪在睡觉。

父类指向子类的时候,父类方法会被字类覆盖。(这是非静态方法哦,静态成员会被重写在另一个内存里,我们这样继承的话,父类的方法不会被子类重写)

package duotai;
class dad {public void a() {System.out.print("a_dad");
}
public void b() {System.out.print("b_dad");
}
}
class son extends dad {public void a() {System.out.print("a_son");
}
public void b() {System.out.print("b_son");
}
}
public class duotai {public static void main(String[] args) {dad k=new son();k.a();k.b();}
}
输出为a_son b_son
看代码的时候a

那么在类中存在的变量会不会和上面函数一样父类的方法被字类覆盖?
气死我了上代码:

package duotai;class dad {int num=1;
public void a() {System.out.print("a_dad");
}
public void b() {System.out.print("b_dad");
}
}
class son extends dad {int num=2;
public void a() {System.out.print("a_son");
}
public void b() {System.out.print("b_son");
}
}public class duotai {public static void main(String[] args) {dad k=new son();son m=new son();System.out.print(k.num);System.out.print(m.num);}}
输出为12事实证明父类的变量不会被字类的变量覆盖

每天一个学废小技巧:instanceof 确定对象类型
代码:

package duotai;abstract class Animal{public abstract void eat();
}
class Cat extends Animal{public void eat() {System.out.print("小猫吃东西");}
}
class Pig extends Animal{public void eat() {System.out.print("小猪吃东西");}public void sleep(){System.out.print("小猪在睡觉");}
}public class duotai {public static void dd(Animal a) {if(a instanceof Cat) {System.out.print("这是猫");}if(a instanceof Pig) {System.out.print("这是猪");}}public static void main(String[] args) {Animal cat=new Cat();Animal pig=new Pig();dd(cat);dd(pig);}
}

课后练习:

可以把人分男人和女人,人作为父类,男人女人继承人这个父类,具体功能各位可以随意写,建议初学者直接输出(System.out.print())自己用上转型,下转型完成一些操作。加油!!!

java学习(一)多态相关推荐

  1. Java学习之 多态 Polymorphism

    Java学习之多态 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = ne ...

  2. 零基础Java学习之多态

    介绍 多态是Java的三大特性之一,另外两个分别是:继承和封装(前面博客已经说了继承和封装了,可以看一下).这两个可以说在一定程度了为多态打下了基础. 通过多态,可以实现一个行为具有多种形态,这里的形 ...

  3. Java学习之多态二

    目录 一.运用多态解决宠物喂食问题 原理分析 运行测试 运行结果 分析 增加宠物和食物种类 Pig类 Rice类 测试 运行结果 一.运用多态解决宠物喂食问题 改变Master类的feed方法的参数列 ...

  4. Java学习之多态一

    目录 一.入门案例 Food类 Animal类 Master类 运行测试 分析 运行结果 问题总结 二.方法的多态 三.对象的多态(重难点/核心) 四个非常重要的知识点(背诵) 举例说明 父类-Ani ...

  5. Java学习笔记-多态的具体体现

    面向对象编程有四个特征:抽象.封装.继承.多态. 多态有四种体现形式:1.接口和接口的继承2.类和类的继承3.重载4.重写其中重载和重写是核心.# 重载:重载发生在同一类中,在该类中如果存在多个同名方 ...

  6. Java学习笔记——多态(实例详解)

    多态是某一事物,在不同时刻体现出来的不同的状态 就比如猫,狗,狼都是动物,我们可以说猫是动物,说狗是动物 但我们不能说动物是猫,动物是狼.也不能说猫是狗,或者狗是狼. 上面这几点都会在多态中体现出来 ...

  7. java多态怎么学_Java学习笔记---多态

    在面向对象的程序设计中,多态是继数据抽象和继承之后的第三种基本特性: 多态通过分离做什么(基类对象)和怎么做(导出类对象),从另一角度将接口和实现分离开来.多态不但能够改善代码的组织结构和可读性,还能 ...

  8. 学习-Java继承和多态之子类继承性

    第1关:学习-Java继承和多态之子类继承性 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务:定义一个 Dog 类,继承 Animal 类(Animal 类已经定义),定义自己的性别属性, ...

  9. 学习-Java继承和多态之方法重载

    第1关:学习-Java继承和多态之方法重载 任务描述 相关知识 编程要求 测试说明 任务描述 本关任务:使用重载方法为 Student 类创建三个构造方法. 相关知识 Java 中重载是指一个类中可以 ...

最新文章

  1. 主瓣,旁瓣,栅瓣概念解析
  2. Openfire Server presence(在线状态)消息处理流程
  3. 计算机考试不用输入扩展名吗,本周末的 计算机等级考试,如果不想考0分,一定要花2分钟看完...
  4. mysql两种索引结构_19.Mysql索引结构及常见索引的区别
  5. 推荐的这5个高效在线工具,每一个都很良心!
  6. SpringBoot2 整合MinIO中间件,实现文件便捷管理
  7. Javascript框架 - ExtJs - 类
  8. 自己动手写Docker系列 -- 5.2实现查看运行中的容器
  9. python编写代码实现文件的拷贝功能_如何使用Python脚本实现文件拷贝
  10. 找回密码forget_password
  11. html元素按压高亮效果
  12. hyper-v 中 安装 Centos 7.0 设置网络 教程
  13. Android Studio开发手机APP(二)-利用MQTT通信开发物联网程序
  14. web前端开发教学视频,web前端开发职业
  15. [proxy:0:0@WORKSTATION-DEV] HYDU_sock_write (utils/sock/sock.c:256): write error (Broken pipe)
  16. 2017年博客第一篇随笔
  17. CorelDRAW X8超低价优惠啦,你却还在用CDR X4破解?!
  18. 虚拟机上装oracle,cmd窗口输入法有问题,按了U,I,O,P,J,K,L,M这些键为什么不是UIOPJK
  19. 为何延时函数不起作用?
  20. 横跨十年CPU架构回顾

热门文章

  1. 垃圾代码评析——关于《C程序设计伴侣》9.4——链表(一)
  2. PyTorch 中如何指定GPU
  3. 泰斯花粉阻隔剂 怎么使用
  4. 蜕变成蝶~Linux设备驱动中的并发控制
  5. angularjs 学习笔记(一) -----JSONP跨站访问
  6. HDU3549+Ford-Fulkerson
  7. Jquery 实现动态添加输入框编号
  8. eyoucms如何调用指定栏目下的推荐文章
  9. 0. Python3源码—编译
  10. java中的深复制和浅复制