Java之多态

Java之多态

开发工具与关键技术:MyEclipse 10,java
作者:刘东标
撰写时间:2019-05-05
多态是同一个行为具有多个不同表现形式或形态的能力。
多态性是对象多种表现形式的体现。
比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。

/**

  • 1、多态的体现
  • 父类的引用指向了自己的子类对象
  • 父类的引用也可以接受自己的对象
  • 2、多态的前提
  • 必须是类与类之间有关系。要么继承,要么实现
  • 通常还有一个前提:存在覆盖
  • 3、多态的好处
  • 多态的出现提高程序的扩展性。
  • 4、多态的弊端
  • 提高了扩展性,但是只能使用父类的引用访问父类中的成员。
  • 5、多态的应用
  • 6、多态的出现代码中的特点(多态使用的注意事项)
  • 第二个问题:如何使用子类特有方法
    */
    /*在多态中成员函数的特点:
    在编译时期:参阅引用型变量所属类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
    在运行时期:参阅对象所属的类中是否有调用的方法
    简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)

在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边
*/
class Animal{//父类 动物
int num =10;
public void eat(){
System.out.println(“吃吃吃”);}}
class Cat extends Animal{//子类 猫
int num =100;
public void eat(){
System.out.println(“吃鱼”);}
public void catchMouse(){
System.out.println(“捉老鼠”);}}
class Dog extends Animal{//子类 狗
public void eat(){
System.out.println(“吃骨头”);}
public void KenJia(){
System.out.println(“看家”);}}
class Pig extends Animal{//子类 猪
public void eat(){
System.out.println(“饲料”);}
public static void gongDi(){
System.out.println(“拱地”);}}
class DoAinamal{
public void doSome(Animal a){
a.eat();}}
public class DuoTaiDemo {
public static void main(String[] args) {
Animal a = new Cat();//类型提升。向上转型
a.eat();
System.out.println(a.num);
System.out.println("-----------");
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转成子类类型。向下转型
Cat c = (Cat)a;
c.catchMouse();
System.out.println(c.num);
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类应用指向了自己子类对象时,该应用可以被提升,也可以被强制转换
//多态自始至终都是子类对象在做着变化。
//Animal a = new Animal();
//Cat c = (Cat)a;
// function(new Cat());
// function(new Dog());
// function(new Pig());
DoAinamal ainamal = new DoAinamal();
ainamal.doSome(new Pig());}
public static void function(Animal a){ //方法
a.eat();
if(a instanceof Cat){
Cat c =(Cat)a;
c.catchMouse();
}else if (a instanceof Dog) {
Dog d = (Dog)a;
d.KenJia();
}else if (a instanceof Pig) {
Pig p = (Pig)a;
p.gongDi();}}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值