作者:
逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言!
前言
在面向对象编程中,Java 的继承与多态是两个核心概念,它们提供了强大的机制来组织和扩展代码。本文将深入探讨这些概念,并解释它们的应用和区别。
Java 继承与多态的理解与应用
1. 定义子类与超类
超类(父类)
超类是被继承的类,它包含了子类共享的属性和方法。
class Animal {
void eat() {
System.out.println("Animal is eating");
}
}
子类
子类通过 extends
关键字扩展超类,并可以添加新的属性和方法。
class Dog extends Animal {
void bark() {
System.out.println("Dog is barking");
}
}
2. 方法覆盖(Override)
方法覆盖允许子类重写从父类继承而来的方法,以实现特定的行为。覆盖的方法必须具有相同的方法签名(方法名、参数列表、返回类型)。
class Cat extends Animal {
@Override
void eat() {
System.out.println("Cat is eating");
}
}
3. 子类构造器
子类构造器可以调用父类的构造器来初始化从父类继承的属性。使用 super()
调用父类构造器,或者省略 super()
而系统默认调用父类的无参构造器。
class Dog extends Animal {
Dog() {
super(); // 调用父类的构造器
}
Dog(String name) {
// 自定义子类构造器
}
}
4. 继承层次与多态
Java 支持多层继承,即一个类可以同时是另一个类的子类和另一个类的父类。多态性允许同一个方法在不同对象上具有不同的行为。
Animal animal = new Dog(); // 向上转型
animal.eat(); // 调用的是Dog类中的eat方法
5. 阻止继承与final关键字
使用 final
关键字可以阻止类被继承或方法被重写。被 final
修饰的类不能被其他类继承,被 final
修饰的方法不能被子类覆盖。
final class FinalClass {
// 该类不能被继承
}
class SubClass extends FinalClass {
// 编译错误,无法继承final类
}
6. 强制类型转换
在继承关系中,可以使用强制类型转换将对象引用转换为其子类或父类的类型。需要注意的是,如果转换不正确会抛出 ClassCastException
。
Animal animal = new Dog();
Dog dog = (Dog) animal; // 向下转型
7. 抽象类与接口
抽象类
抽象类是不能被实例化的类,用 abstract
关键字声明。抽象类可以包含抽象方法和具体方法,子类必须实现抽象方法。
abstract class Shape {
abstract void draw(); // 抽象方法
}
接口
接口是一组方法的规范,可以被类实现。一个类可以实现多个接口,从而具备接口定义的所有方法。
interface Drawable {
void draw(); // 接口方法,没有方法体
}
class Circle extends Shape implements Drawable {
@Override
void draw() {
System.out.println("Circle drawing");
}
}
8. 受保护访问(Protected Access)
使用 protected
关键字修饰成员(属性和方法)允许子类访问这些成员,同时也允许同一包中的其他类访问这些成员。
class Animal {
protected String name;
protected void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void setNameAndPrint(String name) {
setName(name);
System.out.println("Dog's name: " + this.name);
}
}
结论
继承与多态是Java面向对象编程中的重要概念,它们能够提高代码的重用性和可扩展性。通过本文的介绍,读者可以更深入地理解和应用Java中的继承与多态,同时也理解了抽象类、接口、方法覆盖、类型转换等相关概念及其在实际开发中的应用场景。