一、概述
面向对象编程中,继承是一个比较重要的概念,继承描述的是事物之间的所属关系,是从已有的类中构建出新的类,已有的类称为父类,新的类称为子类,子类具有父类的数据属性和方法,并能扩展新的属性和方法(不能继承私有)。
1、继承的使用
- 格式:使用 extends 关键字 ==> class 子类 extends 父类 ()
- 创建 Person 类和 Student 子类:public class Student extends Person {...}
2、继承的优点
- 提高了代码的复用性,提高了软件的开发效率
- 让类与类之间产生了联系,提供了多态的前提
3、继承的特点
- 在Java中,只支持单继承,不支持多继承,一个子类只能有一个直接父类;
- 父类私有成员,子类不能继承,因为根本看不到;
- 一个父类可以有多个子类;
- 支持多层继承,一个类的父类可以再去继承另外的父类;
- 子类和父类是相对的概念,一个类是某个类父类的同时,也可以是另一个类的子类。
4、继承中成员变量关系
- 不同变量名子类直接调用;
- 相同变量名调用时,如果子类有,就不调用父类的变量,如果子类没有,父类有,则调用父类的;
- 在子类中,要调用父类的成员,使用关键字 super,调用父类方法也是一样,使用super关键字。
二、代码实例
先创建Person.java父类
package myExtends;
public abstract class Person {
String name;
int age;
int i = 1;
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
再创建Studen.java子类
package myExtends;
/**
* 使用extends关键字创建子类并新定义了number变量,定义i进行继承中成员变量的关系进行测试
*/
public class Student extends Person {
int i = 2;
int number;
public void setNumber(int number)
{
this.number = number;
}
//在子类中能直接使用父类的非私有成员变量
public void message()
{
System.out.println("My name is " + this.name + ",I am " + this.age + " years old," + " my number is " + this.number);
}
public void print()
{
System.out.println(name);
System.out.println(super.i); //在子类中,要调用父类的成员,使用关键字super
}
}
在Main.java中赋值并调用
package myExtends;
public class Main {
public static void main(String[] args)
{
Student stu = new Student();
stu.setAge(18);
stu.setName("java");
stu.setNumber(32);
stu.message();
stu.print();
System.out.println(stu.i); //子类有则调用子类的,子类没有则调用父类的
}
}
实例分析:
- 在父类Person中定义了非私有变量name、age和测试变量i,子类Student中新创建了number变量并在子类中能够使用父类中的变量
- 在父类和子类中都有 i 变量,调用时,如果子类有,就不调用父类的变量,如果子类没有,父类有,则调用父类的
- 在子类中,要调用父类的成员,使用关键字 super,调用父类方法也是一样,使用super关键字