多态的理解

多态

1.对多态的理解:同一个对象不同时刻体现出来的不同状态
简单来说就是猫和狗都是动物,但他们又有许多不同,猫和狗是动物向下延伸的不同结果,这就是多态。
2.多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
3.多态的分类:
a:具体类多态

    class Fu {}
                class Zi extends Fu {}

                Fu f = new Zi();
        b:抽象类多态
    abstract class Fu {}
                class Zi extends Fu {}

                Fu f = new Zi();
        c:接口多态
interface Fu {}

                Fu f = new Zi();

4.多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造(注:子类默认调用父类的无参构造,等于默认在子类的构造方法中有super();)
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边

package com.lenovo.demo3;
/**
 * 动物类
 * @author Petrichor
 *
 */
public class Animal {
    int a = 10;
public Animal() {
        System.out.println("动物无参构造");
    }
public Animal(int a) {
        System.out.println("动物有参构造");
    }
public void eat() {
        System.out.println("动物吃东西");
    }
public void sleep() {
        System.out.println("动物睡觉");
    }
public int getA() {
        return a;
    }
public void setA(int a) {
        this.a = a;
    }
}
package com.lenovo.demo3;
/**
 * 猫类
 * @author petrichor
 *
 */
public class Cat extends Animal {
    int a = 20;
public Cat(int a) {
        System.out.println("猫的有参构造");
    }
public Cat() {
        super(5);
        System.out.println("猫的无参构造");
    }
public void eat() {
        System.out.println("猫吃鱼");
    }
public void sleep() {
        super.sleep();
        System.out.println("猫躺着睡");
    }
    public void fly(){
        System.out.println("猫能飞?");
    }   
}
package com.lenovo.demo3;

/**
 * 测试类
 * @author Petrichor
 *
 */
public class Tset {
    public static void main(String[] args) {
        // 多态
        Animal cat = new Cat();
        // 动物有参构造 猫的无参构造
        cat.eat();// 猫吃鱼
        cat.sleep();// 动物睡觉 猫躺着睡
        // cat.fly();不能调用,Animal中没有fly方法
        System.out.println(cat.a);// 10
        System.out.println(cat.getA());// 10
        cat.setA(30);
        System.out.println(cat.getA());// 30
        // 普通
        Cat cat2 = new Cat(5);// 动物无参构造 猫的有参构造
        cat2.fly();// 猫能飞?
        System.out.println(cat2.a);// 20
        System.out.println(cat2.getA());// 10
        cat2.setA(40);
        System.out.println(cat2.getA());// 40
    }
}

这个动物和猫类基本体现多态中成员变量、成员方法、构造方法的调用,可以看到当我们

Animal cat = new Cat();

调用的a是Animal类的。而当

Cat cat2 = new Cat(5);

调用的a是Cat类的。

5.多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
6.多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
7.多态中的转型
A:向上转型
从子到父
B:向下转型
从父到子

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值