欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

萌新学Java之java入门七

程序员文章站 2024-03-01 19:24:52
...

多态

多态:一种事物的多种形态(状态)

多态的规则(前提)

1.必须类与类之间有关联(继承关系)
2.必须要有方法的重写(否则多态会没有意义)
3.父类的引用 指向 子类的空间 (核心)

父类的指针  指向 子类对象

例:

class Animal{
public void eat() {
System.out.println(“吃”);
}
}
class Cat extends Animal{
@Override
public void eat() {
System.out.println(“吃鱼”);
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println(“啃骨头”);
}
}

public class Demo01 {
public static void main(String[] args) {
    //父类的引用 指向 父类空间
    Animal a = new Animal();
    a.eat();

    //父类的引用 指向 子类对象空间
    //使用多态的形式 创建对象
    //调用方法 最后执行的是子类重写的方法
    Animal aCat = new Cat();
    aCat.eat();

    Animal aDog = new Cat();
    aDog.eat();
}}

当使用多态的形式创建对象时

访问成员变量

编译时: 需要看父类当中有没有该变量 没有就报错
运行时: 最终访问到的成员变量 是父类中成员变量

访问成员变量时 编译和运行都看父类的

访问成员变量

编译时: 需要看父类中有没有该方法 没有就报错
运行时: 最终运行时 入栈执行时子类中重写方法

访问成员方法时: 编译时看父类 运行时看子类

萌新学Java之java入门七

多态的好处

1.(继承的好处) 提高工作效率 增强复用性
2.核心 增强方法扩张性 (使用父类当做方法的参数时)

class Person{
public void speak() {
System.out.println(“聊天”);
}
}
class Fraud extends Person{
@Override
public void speak() {
System.out.println(“*”);
}
public void hit() {
System.out.println(“打人”);
}
}

    public static void main(String[] args) {
    //使用多态形式创建对象
    //向上转型 和 向下转型
    //将子类的对象 做了向上的类型提升
    Person p1 = new Person();
    p1.speak();


    Person f1 = new Fraud();
    f1.speak();//调用共有的方法

    ((Fraud) f1).hit();//调用特有的方法
    //需要将类型转回来 类型的向下转型
    //将转上去的类型 再转回来 才能调用子类特有方法
    //强转
    //注意:必须先有向上转型 才能向下转型
}