26Java中的多态

1.多态的概述

多态指的是对象,即对象既有自己的形态,也有其父类的形态。
在这里插入图片描述

2.多态的格式和使用(Day111104.Demo01)

Demo01Multi.java

package Demo01;

/*
* 代码中体现多态性,其实就是一句话:父类引用指向子类对象。
* 这就体现了多态的特点,一只猫被当作动物来对待
* 格式:
* 父类名称 对象名 = new 子类名称();
* 或者
* 接口名称 对象名 = new 实现类名称();
* */
public class Demo01Multi {
    public static void main(String[] args) {
        //使用多态的写法,左侧父类的引用指向了右侧子类的对象。
        Fu ha = new Zi();
        ha.method();//子类方法(右边new的是谁,就是谁的)
        ha.methodFu();//父类特有方法(子类没有便向上找父)

    }

}

Fu.java

package Demo01;

public class Fu {
    public void method() {
        System.out.println("父类方法");
    }
    public void methodFu() {
        System.out.println("父类特有方法");
    }
}

Zi.java

package Demo01;

public class Zi extends Fu{
    @Override
    public void method() {
        System.out.println("子类方法");
    }
}

3.多态中成员变量的使用特点(Day111104.Demo02)

Demo02MultiField.java

package Demo02;

/*
* 访问成员变量的两种方式:
* 1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找
* 2.间接通过成员方法访问:看该方法属于谁,优先用谁,没有则向上找
* */

public class Demo02MultiField {
    public static void main(String[] args) {
        //使用多态的写法,父类引用指向子类对象
        Fu obj = new Zi();
        //成员变量是不能进行覆盖重写的
        System.out.println(obj.num);//父的10
        //System.out.println(obj.numZi);
        //2.间接通过成员方法访问
        obj.showNum();//父:10,子类没有覆盖重写时候;子:20,子类进行覆盖重写时候
    }
}

Fu.java

package Demo02;

public class Fu {
    int num = 10;
    public void showNum() {
        System.out.println(num);
    }
}

Zi.java

package Demo02;

public class Zi extends Fu{
    int num = 20;
    int numZi = 30;
    @Override
    public void showNum() {
        System.out.println(num);
    }
}

4.多态中成员方法的使用特点

Fu.java

package Demo02;

public class Fu {
    int num = 10;
    public void showNum() {
        System.out.println(num);
    }

    public void method() {
        System.out.println("父类方法");
    }
    public void methodFu() {
        System.out.println("父类特有方法");
    }
}

Zi.java

package Demo02;

public class Zi extends Fu{
    int num = 20;
    int numZi = 30;
    @Override
    public void showNum() {
        System.out.println(num);
    }
    @Override
    public void method() {
        System.out.println("子类重写父类的方法");
    }
    public void methodZi() {
        System.out.println("子类特有方法");
    }
}

Demo02MultiMethod.java

package Demo02;
/*
* 在多态代码中,成员方法的访问规则是:
* 1.看new的是谁,就优先用谁,没有则向上找。
*
* 口诀:编译看左边,运行看右边。
*
* 对比:
* 成员变量:编译看左边,运行还看左边。
* 成员方法:编译看左边,运行看右边。
* */
public class Demo02MultiMethod {
    public static void main(String[] args) {
        Fu ha = new Zi();
        ha.method();//子类重写父类的方法(父子都有,优先用子)
        ha.methodFu();//父类特有方法(子类没有,父类有,则向上找到父)

        //编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错。
        //Fu.methodZi();//错误写法
    }
}

5.使用多态的好处

在这里插入图片描述
左边的代码一直都是不变的,让代码更加灵活统一。多态其实就是从老板的角度来看的,我不管你怎么做,我只要你工作就行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值