第三章:Java 面向对象编程(OOP)基础 第三节 继承与多态

1. 继承的概念与实现

首先,我们来了解一下继承的概念以及它在Java中的实现

  • 继承的概念:继承是面向对象编程中的一个重要特性,它允许一个类继承另一个类的属性和方法。通过继承,我们可以创建一个新的类,这个类不仅拥有父类的所有功能,还可以扩展或修改父类的功能。继承使得代码的复用性更高,结构更加清晰。

  • 继承的实现:在Java中,继承通过extends关键字来实现。例如:

    public class Animal {
        void eat() {
            System.out.println("This animal eats food.");
        }
    }
    ​
    public class Dog extends Animal {
        void bark() {
            System.out.println("The dog barks.");
        }
    }

    在这个例子中,Dog类继承了Animal类,因此Dog类可以访问Animal类的eat()方法。同时,Dog类还扩展了一个新的bark()方法。


2. super关键字的使用

接下来,我们来看看super关键字的使用。

  • super关键字super关键字用于调用父类的构造方法或父类的方法。它主要在子类中使用,用于避免子类覆盖父类的方法或属性。例如:

    public class Animal {
        String name = "Animal";
    ​
        void eat() {
            System.out.println("Animal is eating");
        }
    }
    ​
    public class Dog extends Animal {
        String name = "Dog";
    ​
        void displayNames() {
            System.out.println("Name in Dog class: " + name);
            System.out.println("Name in Animal class: " + super.name);
        }
    ​
        void eat() {
            super.eat(); // 调用父类的eat方法
            System.out.println("Dog is eating");
        }
    }

    在这个例子中,super.name引用了父类Animal中的name属性,而super.eat()则调用了父类的eat()方法。


3. 方法的重写(Override)与重载(Overload)

接下来,我们来讨论方法的重写(Override)与重载(Overload)

  • 方法的重写(Override):重写是指子类重新定义父类中的某个方法。重写后的方法在子类中会覆盖父类的方法,实现不同的行为。重写的方法必须与父类方法具有相同的返回类型和参数列表。例如:

    @Override
    void eat() {
        System.out.println("Dog is eating its food");
    }

    这里,Dog类重写了Animal类的eat()方法,输出了不同的信息。

  • 方法的重载(Overload):重载是指在同一个类中定义多个方法,它们的名称相同但参数列表不同。重载不受返回类型的影响,主要用于提高方法的灵活性。例如:

    void eat(String food) {
        System.out.println("Animal is eating " + food);
    }
    ​
    void eat(int amount) {
        System.out.println("Animal is eating " + amount + " units of food");
    }

    这里,eat方法被重载了两次,一次接受String参数,另一次接受int参数。


4. 多态的概念与应用场景

接下来,我们来了解多态的概念以及它的应用场景

  • 多态的概念:多态是指在不同的上下文中,使用同一个方法名或操作符来执行不同的操作。多态通过方法重写和接口的实现来实现。多态使得一个对象在不同时刻表现出不同的行为,例如:

    Animal myDog = new Dog();
    myDog.eat(); // 调用的是Dog类的eat方法

    这里,尽管myDog被声明为Animal类型,但它实际引用的是Dog类的对象,因此调用的eat()方法是Dog类中的实现。

  • 应用场景:多态常用于处理不同类型的对象,同时通过统一的接口或父类来调用它们的行为。例如,在图形绘制应用中,可以通过一个draw方法来绘制不同类型的图形(如圆形、矩形等),而不必关心具体的图形类型。


5. 抽象类与接口的区别与应用

最后,我们来讨论抽象类与接口的区别以及它们的应用

  • 抽象类:抽象类是不能实例化的类,它提供了一个模板,子类必须实现抽象类中的抽象方法。抽象类可以包含具体的方法和属性。它适用于当多个类有一些共同行为时,但这些类又不完全相同时。例如:

    public abstract class Animal {
        abstract void makeSound();
    ​
        void eat() {
            System.out.println("Animal is eating");
        }
    }

    这里,Animal是一个抽象类,makeSound()方法是抽象方法,必须在子类中实现。

  • 接口:接口是更为严格的抽象类型,它只能包含抽象方法(Java 8之后可以包含默认方法和静态方法)。接口用于定义类必须实现的行为。一个类可以实现多个接口,而抽象类只能被单继承。例如:

    public interface Moveable {
        void move();
    }
    ​
    public class Car implements Moveable {
        @Override
        public void move() {
            System.out.println("Car is moving");
        }
    }

    这里,Car类实现了Moveable接口,并实现了move()方法。

  • 区别与应用:抽象类用于有共性但又有部分实现的类,而接口用于定义一组行为,任何实现该接口的类必须提供这些行为的具体实现。抽象类更适合类之间的层次结构,而接口更适合行为的抽象。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱掉发的小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值