面相对象系列二之多态

一、定义

1.理解

多态的定义很简单,多态多态就是同一个方法不同的行为。比如说我给你一张白纸(同一个方法),你选择不同的打印机(对象)会打印出不同的纸 比如黑白色 或者彩色(行为)。

2.条件

①向上转型

②重写同名方法

③父类引用调用子类对象的方法

二、向上转型

1.定义

向上转型就是将下面的子类对象给上面父类引用,就像这样。用代码所示

狗类(子类)

public class Dog extends Animal {
    public String name;
    public int age;

    public Dog(String name, int age, String name1, int age1) {
        super(name, age);
        this.name = name1;
        this.age = age1;
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    public void eat(){
        System.out.println("正在吃狗粮");
    }
    public void wangwang(){
        System.out.println("汪汪叫");
    }
}

动物类(父类)

public class Animal {
    public String name;
    public int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println("正在吃");
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("小狗",10);//创造子类对象
        Animal animal = dog;//子类对象给父类引用
    }
}

将代码简写而来就是

public class Main {
    public static void main(String[] args) {
        Animal animal= new Dog("小狗",10);
    }
}

所以我们能看出来前面的animal类就是父类引用 引用指向了子类对象dog。所以向上转型就是将父类引用指向了子类对象。

2.向上转型的理解⭐️

🌰

animal.eat可以调用

animal.wangwang却不能调用,因为wangwang方法不属于animal自己的类里面的方法。但是有一种方法可以访问到一一向上转型(也就是父类引用调用子类对象)。可以理解为“编译看左边,运行看右边。”

编译看左边,左边用父类引用,编译器会先看左边有没有这类父类引用,如果没有就会报错。

执行看右边,如果你重写了子类的方法,那么就会执行右边子类重写的方法。

2.三种向上转型的方式

下面有三种向上转型的方式

①直接引用

将父类引用引用给子类对象

Animal animal1 = new Dog("小狗",10);

②用方法传参的方式

将我的参数以父类的形式传出 再引用子类对象

public class Main {
    public static void main(String[] args) {
       Dog dog = new Dog();
        fun1(dog);
    } 
    public static void fun1(Animal animal){

    }

}

③以返回值的形式传出

public class Main {
    public static void main(String[] args) {
       Animal animal = fun2();    
    }
    public static Animal fun2(){
        Dog dog = new Dog();
        return dog;
        //或者简写return new dog;
    }

}

❗️以上这三种形式不用记,理解了也自然知道了。

三、再谈重写

重写:是对一个方法体进行重新书写,其返回值,方法名,参数形式都一致。

❓为什么要进行方法的重写

⭐️因为当向上转型时,用父类引用引用了子类对象,所以会编译看左是否能通过,运行看右是否能执行,这里的执行就是看有没有子类重写父类方法,执行子类重写方法。

⚠️重写注意事项

①private和final修饰的方法不能被重写

🍎final修饰的变量都是常量,是不可修改和改变的,对于方法也一样。private修饰的方法也不可修改。

②被static修饰的方法

③构造方法不能进行重写

④重写的方法不能大于父类的修饰权限

private< default <protect <public

⑤构造方法不能进行重写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值