Java 2023.7.12(方法重写/重载、多态、抽象类/方法、instanceof)
在Java编程语言中,方法重写(Method Overriding)和重载(Method Overloading)、多态(Polymorphism)、抽象类(Abstract Class)与抽象方法(Abstract Method)以及`instanceof`关键字是核心的面向对象特性。让我们深入探讨这些概念。 ### 方法重写(Method Overriding) 方法重写发生在子类中,它允许子类重新定义父类中的某个已有的方法。这样做可以扩展或修改父类的行为。重写规则包括: 1. 子类方法必须与父类方法有相同的名称、返回类型和参数列表。 2. 子类方法的访问权限不能低于父类方法。 3. 子类方法不能比父类方法更限制(即不能是final、static或private)。 4. 父类的非final方法可以被重写。 例如,宠物类(Pet)有一个`speak()`方法,主人类(Owner)继承宠物类并重写`speak()`方法,使其具有不同的行为。 ### 方法重载(Method Overloading) 方法重载是指在同一个类中可以有多个同名方法,但它们的参数列表不同(参数个数、类型或顺序不同)。编译器会根据传入的参数来决定调用哪个方法。 例如,宠物类可能有两个同名的`feed()`方法,一个接收食物类型作为参数,另一个接收食物量。 ```java public void feed(String foodType) { ... } public void feed(int quantity) { ... } ``` ### 多态(Polymorphism) 多态是面向对象的三大特性之一,它允许我们使用父类类型的引用指向子类对象。这样,同一个方法调用可以产生不同的结果,具体取决于实际的对象类型。多态分为编译时多态(方法重载)和运行时多态(方法重写)。 ### 抽象类(Abstract Class)与抽象方法(Abstract Method) 抽象类是不能实例化的类,它通常用于定义一组公共接口,由其子类实现具体的功能。抽象方法没有方法体,只有方法签名,必须在抽象类中声明。如果一个类包含至少一个抽象方法,那么该类必须声明为抽象类。 例如,我们可以定义一个抽象的宠物类(Pet),包含抽象方法`speak()`和`eat()`,然后让具体的猫类(Cat)和狗类(Dog)实现这些方法。 ```java abstract class Pet { abstract void speak(); abstract void eat(); } class Cat extends Pet { public void speak() { ... } public void eat() { ... } } class Dog extends Pet { public void speak() { ... } public void eat() { ... } } ``` ### `instanceof` 关键字 `instanceof`关键字用于判断一个对象是否是特定类或其子类的实例。它可以返回一个布尔值,表示对象能否被转换为指定类型。 ```java Pet pet = new Cat(); // 宠物实例化为猫 if (pet instanceof Cat) { Cat myCat = (Cat) pet; // 类型转换 myCat.speak(); // 调用猫特有的方法 } ``` 在这个例子中,我们通过`instanceof`检查`pet`是否是`Cat`的实例,如果是,则进行类型转换并调用特定于猫的方法。 通过理解和应用这些概念,开发者可以创建灵活且可扩展的代码结构,以适应各种需求变化。在宠物主人看病的场景中,抽象类和多态性可以用来设计一个通用的“病人”类,而不同的宠物类可以作为其子类,每个宠物类都有自己的“治疗”方法。这样,主人类可以处理任何类型的宠物,并调用相应的治疗方法,实现代码的复用和灵活性。
- 1
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助