首页 > 其他分享 >2.2. 继承与多态

2.2. 继承与多态

时间:2023-05-29 23:00:24浏览次数:64  
标签:name 继承 子类 void 多态 class 2.2 myDog

继承和多态是面向对象编程的两个重要概念,它们使得我们可以创建更加通用、可扩展的代码。

2.2.1. 继承

继承是一种创建新类的方式,新类(子类)从现有类(父类)继承属性和方法。子类可以重写或扩展父类的功能。

要创建一个子类,可以使用 extends 关键字:

class SubClassName extends ParentClassName {
    // 子类的成员变量和方法
}

示例1:继承

// 父类
class Animal {
    String name;
    int age;

    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类
class Dog extends Animal {
    String breed;

    void bark() {
        System.out.println(name + " is barking.");
    }
}

class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "Buddy";
        myDog.age = 3;
        myDog.breed = "Golden Retriever";

        myDog.bark(); // 子类的方法
        myDog.sleep(); // 继承自父类的方法
    }
}

2.2.2. 方法重写(覆盖)

子类可以重写父类的方法,以便在调用子类对象的该方法时使用子类的实现而不是父类的实现。重写方法的返回类型、方法名和参数列表必须与父类相同。

class SubClassName extends ParentClassName {
    @Override // 注解,表明该方法重写了父类的方法,非必须但建议使用
    ReturnType methodName(Parameters) {
        // 子类的实现
    }
}

示例2:方法重写

// 父类
class Animal {
    String name;
    int age;

    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类
class Dog extends Animal {
    String breed;

    void bark() {
        System.out.println(name + " is barking.");
    }

    @Override
    void sleep() {
        System.out.println(name + " the " + breed + " is sleeping.");
    }
}

class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "Buddy";
        myDog.age = 3;
        myDog.breed = "Golden Retriever";

        myDog.bark();
        myDog.sleep(); // 调用子类重写的方法
    }
}

2.2.3. 多态

多态是一个对象在不同情况下表现出不同的行为。多态是通过父类引用指向子类对象实现的。

ParentClassName objectName = new SubClassName();

示例3:多态

// 父类
class Animal {
    String name;
    int age;

    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类
class Dog extends Animal {
    String breed;

    void bark() {
        System.out.println(name + " is barking.");
    }

    @Override
    void sleep() {
        System.out.println(name + " the " + breed + " is sleeping.");
    }
}

class Main {
    public static void main(String[] args) {
        // 多态
        Animal myAnimal = new Dog();
        myAnimal.name = "Buddy";
        myAnimal.age = 3;

        myAnimal.sleep(); // 调用子类重写的方法

        // 注意:无法访问子类特有的方法和属性
        // myAnimal.bark(); // 错误
        // myAnimal.breed = "Golden Retriever"; // 错误
    }
}

多态的主要优点是代码的可扩展性和维护性。当你需要添加新的子类时,不需要修改使用多态的代码。

2.2.4. 抽象类和接口

抽象类和接口是 Java 中实现多态和代码复用的两种方式。

  • 抽象类:包括抽象方法(没有实现的方法)和具体方法。子类必须实现所有抽象方法。使用 abstract 关键字定义抽象类和抽象方法。

    abstract class AbstractClassName {
        // 抽象方法
        abstract ReturnType methodName(Parameters);
    
        // 具体方法
        ReturnType methodName(Parameters) {
            // 方法实现
        }
    }
    ```
    
    
  • 接口:定义一组方法签名(没有实现的方法)。实现接口的类必须实现所有方法。使用 interface 关键字定义接口。

    interface InterfaceName {
        // 方法签名(没有方法体)
        ReturnType methodName(Parameters);
    }
    ```
    

示例4:抽象类和接口

// 抽象类
abstract class Animal {
    String name;
    int age;

    abstract void makeSound();

    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 接口
interface Pet {
    void play();
}

// 子类实现抽象类和接口
class Dog extends Animal implements Pet {
    String breed;

    @Override
    void makeSound() {
        System.out.println(name + " is barking.");
    }

    @Override
    public void play() {
        System.out.println(name + " is playing.");
    }
}

class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "Buddy";
        myDog.age = 3;
        myDog.breed = "Golden Retriever";

        myDog.makeSound(); // 实现抽象类的抽象方法
        myDog.sleep(); // 继承自抽象类的具体方法
        myDog.play(); // 实现接口的方法
    }
}

这是关于继承和多态的基本介绍。通过这些概念,你可以创建更加灵活和可扩展的代码。在实际开发中,你会遇到更多复杂和实用的用例,通过多做练习和深入学习,你将更好地掌握这些知识点。

file

file

推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

标签:name,继承,子类,void,多态,class,2.2,myDog
From: https://www.cnblogs.com/yaoqian/p/17441946.html

相关文章

  • Java中的多态性
    多态性是面向对象编程的一项核心概念之一,它允许程序员使用不同的方式来处理不同的对象类型,而不必知道实际对象类型。在Java中,多态性可以通过继承和接口来实现。继承的多态性在Java中,多态性可以通过继承来实现。子类可以继承父类的方法和属性,并且还可以覆盖它们,使得它们在子类中......
  • Windows 上安装和启动 Nacos 2.2.2 最新版本
    (目录)前言本文旨在为您详细介绍如何安装和启动Nacos2.2.2的最新版本,以及为youlai-mall开源商城版本的升级做好准备工作。版本声明名称版本操作系统Windows11Nacos2.2.2本地启动1.下载Nacos下载nacos-server-2.2.2.zip(⬇️更多版本下载),将文......
  • 更新安装glibc-2.28 遇到的问题
    node--versionnode:/lib64/libstdc++.so.6:version`CXXABI_1.3.9'notfound(requiredbynode)node:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.20'notfound(requiredbynode)node:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.21'notfound......
  • 面向对象设计领域中的参数多态,包含多态,过载多态和强制多态
    参数多态参数多态是指在面向对象编程中,方法的参数可以接受不同类型的对象,并根据实际传递的对象类型来执行不同的操作。它是多态的一种应用形式,通过参数的多态性,可以实现灵活的代码设计和重用。使用场景:当方法需要操作的对象类型不确定时,可以使用多态来接受不同类型的对象,减少......
  • Firefox 插件:网页剪贴簿(继承自 Firefox 旧版插件 ScrapBook X)
    Firefox插件:网页剪贴簿(继承自Firefox旧版插件ScrapBookX)获取网页至本地或后端服务器供检索、组织、加注、编辑。https://addons.mozilla.org/zh-CN/firefox/addon/webscrapbook/ 网页剪贴簿(WebScrapBook)可以忠实撷取网页内容,支援多种储存格式与客制化设定,还可以对撷......
  • 什么是多态?多态的好处
              ......
  • GPT-4多态大模型研究
    1.概述GPT-4是OpenAI最新的系统,能够产生更安全和更有用的回应。它是一个大型的多模态模型(接受图像和文本输入,输出文本),在各种专业和学术的基准测试中展现了人类水平的表现。例如,它在模拟的律师资格考试中得分位于前10%的考生之列;相比之下,GPT-3.5的得分位于后10%。GPT-4是如何做到......
  • 虚函数、纯虚函数、多态与虚表机制详解
    虚函数在类的定义中,前面有virtual关键字的成员函数就是虚函数注:派生类中的成员函数与基类中虚函数同名且参数相同的函数,不加virtual也会自动变成虚函数纯虚函数与抽象类没有函数体的虚函数叫做纯虚函数,包含纯虚函数的类叫抽象类。 例如上面Base中的Examp就是一个纯虚函......
  • 继承的好处
       ......
  • 最完美WIN11_Pro_22H2.22631.1825软件选装纯净版VIP41.8
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_PRO_22H2.22631.1825。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.1825。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......