程序员

java笔记_多态的相关使用

2020-07-26  本文已影响0人  CodeGalaxy

多态

Employee e;
e = new Employee();
e = new Manager();

以上代码就体现出了Employee的多态性。

在Java程序设计语言中,对象变量是<u>多态的</u>。一个Employee变量既可以引用Employee的对象,也可以引用Employee类的任何一个子类的对象,这就是多态性。

但是,使用多态时要注意

Manager Boss = new Manager();
Employee employee = new Manager();
Boss.setBonus(5000); //OK
//但是下面这个代码却是错的
employee.setBonus(5000); //ERROR

错误的原因也很明显:setBonus是Manager类的方法,而Employee类没有setBonus方法,所以无法在employee的方法表中查找到setBonus方法,所以employee不能调用setBonus方法

还有一种错误,不能将父类的引用赋值给子类变量,像下面这段代码就是犯了这种错误

Manager manager = new Employee();

3.2 理解方法调用

下面是调用方法过程的详细描述:

1. 编译器查看对象的声明类型和方法名

​ 需要注意的是:有可能存在多个名字为f但参数x类型不一样的方法。例如,可能存在方法f(int)和方法f(String)。编译器将会一一列举C类中所有名为f的方法和其超类中所有名为f而且<u>可访问</u>的方法。

2. 编译器要确定方法调用中提供的参数类型

如果在所有名为f的方法中存在一个与所提供参数类型完全匹配的方法,就选用这个方法。

3. 动态绑定与静态绑定

补充:

方法重写

1。@Override检查是否进行正确重写。(非必须)

2。如果子类覆写了父类的方法

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run(); //应该打印Person.run还是Student.run?
    }
}

class Person {
    public void run() {
        System.out.println("Person.run");
    }
}

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

一个实际类型为Student,引用类型为Person的变量,调用其run()方法,打印出Student.run。


多态补充

: 多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。

前提和体现:

1.有继承/实现关系
2.有方法重写
3.有父类引用指向子类对象 (举个栗子:动物 animal = new 猫();).


1.多态中成员访问特点

为什么成员变量和成员方法的访问不一样呢?

2.多态的好处与弊端

1、好处:提高了程序的扩展性

具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类类型参与操作。

2、弊端:不能使用子类的特有功能

3.转型

1.向上转型
(从子到父,父类引用指向子类对象)

Animal a = new Cat();

2.向下转型(从父到子,父类引用转化为子类对象)

Cat c=(Cat a);

上一篇下一篇

猜你喜欢

热点阅读