什么是继承?
继承是面向对象三大特征之一。java中的继承描述的是两个类之间的关系,被继承的类称为父类,继承的类称为子类,使用extends关键字来表示。在java语言里面只支持单继承,即一个类只能有一个父类,子类可以继承父类中的非private修饰的成员方法和成员变量,构造方法不能被继承,java里面的继承跟现实生活中的继承颇为相似,现实生活中一个儿子只能有一个父亲,儿子可以继承父亲的房子车子但是不能继承父亲大脑里面的思想和知识。如果一个类没有显示的继承其他类,那么这个类会默认继承Object类,Object是SUN公司提供的java中的根类。
继承的优点
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
继承的缺点
增强了类之间的耦合。
软件开发的一个原则是高内聚,低耦合。
内聚是一个模块内各个元素彼此结合的紧密程度
耦合是一个软件里面不同模块之间相互连接的数量
如何使用extends来实现继承关系?
语法
[修饰符列表] class子类名extends父类名{
类体;
}
首先,来自己定义一个父类SuperClass
publicclassSuperClass{publicvoidm1(){
System.out.println("SuperClass中的m1方法");
}
privatevoidm2(){
System.out.println("SuperClass类中的m2方法");
}
}
然后定义一个子类SubClass来继承SuperClass
public classSubClassextendsSuperClass{
publicvoidm3(){
System.out.println("SubClass中的m3方法");
}
}
写一个测试类来测试一下
public class Test01{
publicstaticvoidmain(String[] args){
SubClass s = new SubClass();
//因为SubClass继承了SuperClass,所以可以在子类里面调用父类的方法
s.m1();
//s.m2();//子类不能访问父类中private修饰的方法
//SubClass中自己的方法
s.m3();
}
}
将上面代码修改一下,创建一个SuperClass的父类SuperSuperClass
public class SuperSuperClass{
publicvoidm0(){
System.out.println("SuperSuperClass中的m0方法");
}
}
让SuperClass继承SuperSuperClass
public class SuperClass extends SuperSuperClass{
publicvoidm1(){
System.out.println("SuperClass中的m1方法");
}
publicvoidm2(){
System.out.println("SuperClass类中的m2方法");
}
}
写一个测试类来测试一下
public class Test02{
publicstaticvoidmain(String[] args){
SubClass s = new SubClass();
s.m0();//可以调用
}
}
Java不支持多继承,但是支持多层继承,即子类—>父类—>爷爷类….—>祖先类—>Object类,子类可以访问其先辈类里面的非private修饰的成员方法和成员变量。