Java extends类的继承(新手必看)
继承在面向对象开发思想中是一个非常重要的概念,它使整个程序架构具有一定的弹性。在程序中复用一些已经定义完善的类,不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。
在 Java 语言中,一个类继承另一个类需要使用关键字 extends,关键字 extends 的使用方法如下:
因为 Java 只支持单继承,即一个类只能有一个父类,所以类似下面的代码是错误的:
子类在继承父类之后,创建子类对象的同时也会调用父类的构造方法。
【实例】创建子类对象,观察构造方法执行顺序。父类 Parent 和子类 Child 都各自有一个无参的构造方法,在 main() 方法中创建子类对象时,Java 虚拟机会先执行父类的构造方法,然后执行子类的构造方法。
子类继承父类之后可以调用父类创建好的属性和方法。
【实例】在电话类基础上衍生出手机类。Telephone 电话类作为父类衍出 Mobile 手机类,手机类可以直接使用电话类的按键属性和拨打电话功能。
Java 虽然不允许同时继承两个父类,但不代表没有多继承的关系,可以通过类似“祖父>父>儿子>孙子”的方式实现多代继承。
例如,因为绝大多数动物都有眼睛、鼻子和嘴,犬类继承动物类,所以犬类也有眼睛、鼻子和嘴。哈士奇是犬类的一个品种,犬类有的特性哈士奇类都有。但哈士奇的眼睛、鼻子和嘴并不是从犬类继承的,而是从动物类继承的。用 Java 代码编写如下:
在 Java 语言中,一个类继承另一个类需要使用关键字 extends,关键字 extends 的使用方法如下:
class Child extends Parent{}
因为 Java 只支持单继承,即一个类只能有一个父类,所以类似下面的代码是错误的:
class Child extends Parent1, Parents2{}
子类在继承父类之后,创建子类对象的同时也会调用父类的构造方法。
【实例】创建子类对象,观察构造方法执行顺序。父类 Parent 和子类 Child 都各自有一个无参的构造方法,在 main() 方法中创建子类对象时,Java 虚拟机会先执行父类的构造方法,然后执行子类的构造方法。
class Parent {
public Parent() {
System.out.println("调用父类构造方法");
}
}
class Child extends Parent {
public Child() {
System.out.println("调用子类构造方法");
}
}
public class Demo {
public static void main(String[] args) {
new Child();
}
}
运行结果如下:
调用父类构造方法
调用子类构造方法
子类继承父类之后可以调用父类创建好的属性和方法。
【实例】在电话类基础上衍生出手机类。Telephone 电话类作为父类衍出 Mobile 手机类,手机类可以直接使用电话类的按键属性和拨打电话功能。
class Telephone {
String button = "button:0~9"; // 成员属性,10 个按键
void call() { // 拨打电话功能
System.out.println("开始拨打电话");
}
}
class Mobile extends Telephone { // 手机类继承电话类
String screen = "screen:液晶屏"; // 成员属性,液晶屏幕
}
public class Demo2 {
public static void main(String[] args) {
Mobile motto = new Mobile();
System.out.println(motto.button); // 子类调用父类属性
System.out.println(motto.screen); // 子类调用父类没有的属性
motto.call(); // 子类调用父类方法
}
}
运行结果如下:
button:0~9
screen:液晶屏
开始拨打电话
Java 虽然不允许同时继承两个父类,但不代表没有多继承的关系,可以通过类似“祖父>父>儿子>孙子”的方式实现多代继承。
例如,因为绝大多数动物都有眼睛、鼻子和嘴,犬类继承动物类,所以犬类也有眼睛、鼻子和嘴。哈士奇是犬类的一个品种,犬类有的特性哈士奇类都有。但哈士奇的眼睛、鼻子和嘴并不是从犬类继承的,而是从动物类继承的。用 Java 代码编写如下:
class Animal { // 父类:动物类
Eye eye; // 眼睛
Mouth mouth; // 嘴巴
Nose nose; // 鼻子
}
class Dog extends Animal { // 子类:犬类
}
class Husky extends Dog { // 孙子类:哈士奇类
}
这 3 个类的继承关系就是 Husky 类继承 Dog 类,Dog 类继承 Animal 类,虽然 Husky 类没有直接继承 Animal 类,但是 Husky 类可以调用 Animal 类提供的可被继承的成员变量和方法。
ICP备案:
公安联网备案: