服务器测评网
我们一直在努力

Java中继承的语法怎么写?代码示例与注意事项解析

继承的基本语法与实现

在Java中,继承是通过extends关键字实现的,子类通过继承父类获得父类的属性和方法,从而实现代码复用和扩展,基本语法结构如下:

Java中继承的语法怎么写?代码示例与注意事项解析

class 父类 {  
    // 父类属性和方法  
}  
class 子类 extends 父类 {  
    // 子类新增属性和方法  
}  

定义一个Animal父类和Dog子类:

class Animal {  
    String name;  
    public void eat() {  
        System.out.println("动物会进食");  
    }  
}  
class Dog extends Animal {  
    public void bark() {  
        System.out.println("狗会叫");  
    }  
}  

上述代码中,Dog类继承了Animal类,因此可以直接使用name属性和eat()方法,同时新增了bark()方法,继承后,子类对象不仅拥有自身定义的成员,还拥有父类的非私有成员,体现了“is-a”(是一个)的 relationships,如“狗是一种动物”。

继承的核心特性

方法重写(Override)

当子类需要修改或扩展父类的方法时,可以通过方法重写实现,重写要求方法签名(方法名、参数列表)与父类方法完全一致,返回类型必须相同或是父类返回类型的子类,访问权限不能低于父类(如父类为public,子类不能为protecteddefault)。

class Animal {  
    public void move() {  
        System.out.println("动物会移动");  
    }  
}  
class Dog extends Animal {  
    @Override  // 注解,用于检查是否正确重写  
    public void move() {  
        System.out.println("狗会跑");  
    }  
}  

调用时,子类对象会优先执行重写后的方法:

Java中继承的语法怎么写?代码示例与注意事项解析

Dog dog = new Dog();  
dog.move();  // 输出:狗会跑  

super关键字

super用于引用父类的成员(属性、方法、构造器),在子类中,若需调用父类的被重写方法或访问父类属性,可通过super实现:

class Animal {  
    String name = "动物";  
    public Animal() {  
        System.out.println("父类Animal构造器");  
    }  
}  
class Dog extends Animal {  
    String name = "狗";  
    public Dog() {  
        super();  // 调用父类构造器(必须放在子类构造器第一行)  
        System.out.println("子类Dog构造器");  
    }  
    public void printName() {  
        System.out.println("子类name:" + name);       // 访问子类属性  
        System.out.println("父类name:" + super.name); // 访问父类属性  
    }  
}  

继承的访问权限

  • public:所有类均可访问。
  • protected:同一包内及子类可访问(子类可通过super访问父类protected成员)。
  • default(包私有):同一包内可访问,子类若不在同一包则无法访问。
  • private:仅父类自身可访问,子类无法直接继承(需通过父类public/protected方法间接访问)。

继承的初始化顺序

Java继承中,对象初始化遵循“先父类后子类”的原则,具体步骤如下:

  1. 分配子类对象内存空间,包含父类成员变量。
  2. 初始化父类成员变量(按定义顺序)。
  3. 执行父类构造器(super())。
  4. 初始化子类成员变量(按定义顺序)。
  5. 执行子类构造器。
    示例代码验证:

    class Parent {  
     static { System.out.println("父类静态代码块"); }  
     { System.out.println("父类非静态代码块"); }  
     public Parent() { System.out.println("父类构造器"); }  
    }  

class Child extends Parent {
static { System.out.println(“子类静态代码块”); }
{ System.out.println(“子类非静态代码块”); }
public Child() { System.out.println(“子类构造器”); }
}

public class Test {
public static void main(String[] args) {
Child child = new Child();
}
}

Java中继承的语法怎么写?代码示例与注意事项解析

输出结果为:  

父类静态代码块
子类静态代码块
父类非静态代码块
父类构造器
子类非静态代码块
子类构造器


### 四、继承的限制与注意事项  
1. **单继承限制**:Java只支持单继承(一个类只能有一个直接父类),但可通过多层继承实现代码扩展(如`A extends B, B extends C`会报错,但`A extends B, B extends C`合法)。  
2. **构造器不继承**:子类不会继承父类的构造器,但可通过`super()`调用父类构造器,若未显式调用,默认调用父类无参构造器;若父类无无参构造器,则子类必须手动调用`super()`并传递参数。  
3. **final类与方法**:被`final`修饰的类不能被继承(如`String`类),被`final`修饰的方法不能被重写。  
4. **避免滥用继承**:继承应满足“里氏替换原则”(LSP),即子类对象应能替换父类对象而不影响程序正确性,若仅为复用代码,优先考虑组合(`has-a`关系)而非继承。  
### 五、继承的应用场景  
继承主要用于以下场景:  
- **代码复用**:将多个类的共同属性和方法提取到父类,子类继承后无需重复定义。  
- **扩展功能**:在父类基础上新增方法或重写已有方法,实现差异化行为。  
- **多态基础**:通过继承实现方法重写,结合父类引用指向子类对象,实现运行时动态绑定。  
定义`Shape`父类及其子类`Circle`、`Rectangle`,统一计算面积的方法:  
```java
class Shape {  
    public double area() { return 0; }  
}  
class Circle extends Shape {  
    private double radius;  
    public Circle(double r) { radius = r; }  
    @Override  
    public double area() { return Math.PI * radius * radius; }  
}  
class Rectangle extends Shape {  
    private double width, height;  
    public Rectangle(double w, double h) { width = w; height = h; }  
    @Override  
    public double area() { return width * height; }  
}  

通过继承,所有子类均可统一调用area()方法,体现了面向对象的“开闭原则”(对扩展开放,对修改关闭)。

Java中的继承是面向对象编程的核心特性之一,通过extends关键字实现,支持方法重写、super引用等功能,能够有效提升代码复用性和可扩展性,但需注意单继承限制、构造器调用规则及滥用继承带来的问题,合理结合多态、封装等特性,才能设计出结构清晰、易于维护的程序,在实际开发中,应根据业务场景选择是否使用继承,必要时优先考虑组合,以保持代码的灵活性和健壮性。

赞(0)
未经允许不得转载:好主机测评网 » Java中继承的语法怎么写?代码示例与注意事项解析