概述
继承,是面向对象语言的特征之一
生活中的子女继承父母拥有的所有财产
JAVA中的继承是指 子类 拥有 父类的 属性 和 方法,这是类之间的关系。
Java 只支持 单继承,也就是只有一个父类
好处
- 提高代码的 复用性。
- 类与类之间产生了关系,是 多态 的前提。
格式
通过 extends 关键字,可以声明一个子类继承一个父类,定义格式如下:
class 父类 {
...
}
class 子类 extends 父类 {
...
}
例子
public class Person {
String name;
int age;
void eat(){
System.out.println("吃");
}
void play(){
System.out.println("玩");
}
}
public class Student extends Person {
}
public class Test {
public static void main(String[] args) {
Student lilei=new Student();
/*
* 因为Student继承了Person类,那么就拥有了Person的属性、方法
*/
lilei.age=20;
lilei.name="李雷";
System.out.println(lilei.age);
System.out.println(lilei.name);
lilei.eat();
lilei.play();
}
}
特点-成员变量
父子类成员变量不重名
如果子类和父类 没有重名 的成员变量,这时的访问是 没有影响 的。代码如下:
public class Student extends Person {
String clazz;
}
public class Test {
public static void main(String[] args) {
Student lilei=new Student();
/*
* 因为Student继承了Person类,那么就拥有了Person的属性、方法
*/
lilei.age=20;
lilei.name="李雷";
lilei.clazz="1班";
System.out.println(lilei.age);
System.out.println(lilei.name);
System.out.println(lilei.clazz);
lilei.eat();
lilei.play();
}
}
特点-成员方法
成员方法不重名
如果子类父类中 没有重名 的成员方法,调用是没有影响 的。
代码如下:
public class Student extends Person {
String clazz;
void study(){
System.out.println("学习");
}
//子类的方法,可以访问父类的属性
void printName(){
System.out.println(name);
}
}
public class Test {
public static void main(String[] args) {
Student lilei=new Student();
/*
* 因为Student继承了Person类,那么就拥有了Person的属性、方法
*/
lilei.age=20;
lilei.name="李雷";
lilei.clazz="1班";
System.out.println(lilei.age);
System.out.println(lilei.name);
System.out.println(lilei.clazz);
lilei.eat();
lilei.play();
lilei.study();
lilei.printName();
}
}
特点-构造方法
- 构造方法的名字是与类名一致的。所以 子类是无法继承父类的构造方法
- 创建子类的对象时,会先调用父类的构造方法,然后调用子类的构造方法
继承的特点
Java只支持单继承
不支持多继承。
//一个类只能有一个父类,不可以有多个父类。
class C extends A{} //ok
class C extends A,B... //error
Java支持多层继承
祖、父、子、孙
class A{}
class B extends A{}
class C extends B{}
顶层父类是 Object 类。所有的类默认继承Object,作为父类。
