1.继承的基本语法
1.1.什么叫继承
继承是面向对象语言中一种由已有类创建新类的机制,即:
一个新的类可以从已有的类获取其已有的属性
和方法
。
- 这个新的类称为子类,也叫派生类;
- 已有的那个类称为父类,也叫基类;
比如下图:
1.2.为什么需要继承
- 代码得到极大的重用;
- 形成一个类的层次结构;
- 更好的模拟了现实世界(遗传性);
1.3.继承的基本语法
Java中类的继承使用关键字extends
,语法如下:
//subclass表示子类
//superclass表示子类要继承的父类
class <subclass> extends <superclass>
{
}
1.4.Java中是否允许多继承?
Java中只允许单继承,不允许多继承。
- 单继承:一个子类只能有一个父类;
- 多继承:一个子类有多个父类;
1.5.继承的原则
面向对象思想中的继承反映的是现实世界中一般到特殊的关系。
比如在1.1.节中的图中:
- 学生是一种特殊的人,职工是一种特殊的人,教师是一种特殊的人;
- 小学生是一种特殊的学生;
- 教授是一种特殊的教师;
2.(同包)继承的权限问题
在同一个包中,子类继承父类的时候,并不是所有的父类成员都被子类继承,而是根据父类成员的访问控制符选择性继承:
- 父类的私有成员不可以被子类继承,其他的成员都可以被继承;
测试程序如下:
/**
* @brief 测试同包继承的成员访问权限
* @author mculover666
* @date 2019/4/27
*/
class A
{
int i;
private int j;
protected int k;
public int h;
void fa()
{
}
private void fb()
{
}
protected void fc()
{
}
public void fd()
{
}
}
class B extends A
{
}
class TestExtends
{
public static void main(String[] args)
{
B bb = new B();
bb.i = 1;
//bb.j = 2; //错误,父类私有的成员属性不被继承
bb.k = 3;
bb.h = 4;
bb.fa();
//bb.fb(); //错误,父类私有的成员方法不被继承
bb.fc();
bb.fd();
}
}
如果将main方法中两行代码的注释bb.j
和bb.fb()
取消,则编译时会因为访问权限报错:
3.使用super调用父类构造方法
父类的构造方法不被子类继承,但是子类可以通过super()
关键字调用父类的构造方法,对成员属性进行初始化,需要注意两点:
- super的调用必须是构造函数中的第一个语句;
- 子类构造函数默认调用super()函数,如果父类没有该构造方法,编译报错;
测试程序:
/**
* @brief 测试构造函数的继承
* @author mculover666
* @date 2019/4/28
*/
class A
{
public int i;
public int j;
public A(int i,int j)
{
this.i = i;
this.j = j;
}
}
class B extends A
{
public int k;
public B(int i,int j,int k)
{
/* 重点:子类可以通过super()调用父类的构造方法 */
super(i, j);
this.k = k;
}
public void show()
{
System.out.println("i = "+i+",j = "+j+",k = "+k);
}
}
class TestSuper
{
public static void main(String[] args)
{
B b1 = new B(1,2,3);
b1.show();
}
}
运行结果如下:
接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。