Java继承的定义和使用(附带实例)
继承(extends)是指子类拥有父类的非私有属性和方法,使子类对象(实例)具有父类的特性和方法。父类被称为基类或超类,子类也被称为派生类。
继承是实现代码重用的有力手段,能够有效缩短开发周期、降低开发成本,实现代码的复用和层次化设计。
继承的作用有以下 2 点:
在 Java 中,继承通过使用关键字 extends 来实现。语法结构如下:
【实例 1】创建 Animal 类和 Cat 类,Animal 类作为父类,Cat 类作为子类,Animal 类的成员属性是 name,成员方法是 eat() 方法,Cat 类的成员属性是 name,成员方法是 eat() 方法和 sleep() 方法,使用继承实现,代码如下:
在继承中,成员的访问要遵循以下 2 点规则:
【实例 2】例 1 实现了继承,现在针对同一个案例实现对构造方法的顺序调用,代码如下:
继承是实现代码重用的有力手段,能够有效缩短开发周期、降低开发成本,实现代码的复用和层次化设计。
继承的作用有以下 2 点:
- 代码复用:子类可以直接使用父类中已经实现的方法和属性,避免重复编写代码。
- 层次结构构建:可以构建具有层次关系的类体系,更好地组织和管理代码。
在 Java 中,继承通过使用关键字 extends 来实现。语法结构如下:
访问修饰符 class 子类名称 extends 父类名称 { 子类成员 }
【实例 1】创建 Animal 类和 Cat 类,Animal 类作为父类,Cat 类作为子类,Animal 类的成员属性是 name,成员方法是 eat() 方法,Cat 类的成员属性是 name,成员方法是 eat() 方法和 sleep() 方法,使用继承实现,代码如下:
public class Animal { // 定义私有的属性:name private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } // 定义成员方法:eat 方法 public void eat() { System.out.println("Animal 动物吃东西"); } } public class Cat extends Animal { @Override public void eat() { System.out.println("Cat 猫吃猫粮"); } // 子类中特有的方法 public void sleep() { System.out.println("猫在睡觉"); } }在上述代码中,Cat 类继承了 Animal 类的 name 属性和 eat() 方法,同时又有自己特有的 sleep() 方法。通过继承,可以避免在 Cat 类中重复编写 eat() 方法的代码,实现了对代码的复用。
在继承中,成员的访问要遵循以下 2 点规则:
- 子类可以访问父类的非私有成员;
- 子类不可以直接访问父类的私有成员,但可以通过父类提供的公共或受保护的方法间接访问。
Java构造方法的调用顺序
- 当创建子类对象时,首先会调用父类的构造方法,然后再调用子类的构造方法;
- 如果子类的构造方法中没有显式调用父类的构造方法,编译器就会自动插入一条对父类无参数构造方法的调用。
【实例 2】例 1 实现了继承,现在针对同一个案例实现对构造方法的顺序调用,代码如下:
public class Animal { // 定义私有的属性:name private String name; // 无参构造方法 public Animal() { } // 带参构造方法 public Animal(String name) { this.name = name; } // 获取 name 属性的值 public String getName() { return name; } // 设置 name 属性的值 public void setName(String name) { this.name = name; } // 定义成员方法:eat 方法 public void eat() { System.out.println("Animal 动物吃东西"); } } public class Cat extends Animal { // 无参构造方法 public Cat() { } // 带参构造方法 public Cat(String name) { super(name); // 调用父类的带参构造方法 } // 重写父类的 eat 方法 @Override public void eat() { System.out.println("Cat 猫吃猫粮"); } // 子类中特有的方法 public void sleep() { System.out.println("猫在睡觉"); } } public class TestCat { public static void main(String[] args) { Cat cat = new Cat(); // 创建 Cat 对象 cat.eat(); // 调用 eat 方法 } }在上述代码中,我们在 TestCat 类中可以看出在创建 Cat 子类的对象时,先调用的是 Animal 父类的构造方法,然后再次调用 Cat 子类的构造方法。