一.继承概述
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承是指在原有类的基础上,进行功能扩展,创建新的类型。
继承的特点:子类可以拥有父类的内容,子类还可以有自己特有的内容。
继承的本质说白了就是子类能够使用父类的方法和变量。一个类之中实现了一个很复杂的方法,再给你一个新的类,要求重新实现这个方法,就直接继承。
二.继承的格式
格式:public class 子类名 extends 父类名{}
比如:public class Lianghao extends Guo{}
这里,Lianghao是子类,也被称为派生类,Guo是父类,也被称为基类,超类
三.继承的优缺点
优点:1.实现了数据和方法的共享
2.提高代码的复用性
3.提高代码的维护性
4.提高代码的可拓展性
弊端:增加了类和类之间的耦合性,削弱了子类的独立性
四.代码举例
public class Stu{
public String sno;
public void study() {
System.out.println("我爱学习");
}
}
class XiaoMing extends Stu{
}
class XiaoHong extends Stu{
}
class Demo {
public static void main(String[] args) {
XiaoHong xiaohong =new XiaoHong();
XiaoMing xiaoming =new XiaoMing();
xiaoming.sno="123";
xiaohong.sno="456";
xiaohong.study();
xiaoming.study();
System.out.println(xiaohong.sno);
System.out.println(xiaoming.sno);
}
}
XiaoMing类和XiaoHong类继承Stu类,两个类的对象都可以调用父类的方法以及变量。
五.带有继承的程序的表达顺序
public class Test extends Base{
static{
System.out.println("Test static");
}
public Test(){
System.out.println("Test constur");
}
public static void main(String[] args) {
System.out.println("main---1");
new Test();
System.out.println("main---2");
}
}
class Base{
static{
System.out.println("Base static");
}
public Base(){
System.out.println("Base constur");
}
}
大家可以先自己看一看这段程序,思考一下哪些会先输出哪个,后输出哪个。
在main方法入栈之前,会先对程序进入一轮扫描,加载到内存,之后才是程序的表达。
在扫描的过程中,扫描到Test,发现其父类Base,因为Base是Test的父类,所以会先加载Base,然后才会加载Test。
前面的文章说过static修饰的代码块会先进行输出,因此在main方法表达之前就会先输出
Base static和Test static
之后是main方法执行,输出main1
new Test ();创建一个Test对象的时候会先调用其父类的构造器再调用子类的构造器
因此输出Base constur再输出Test constur
最后输出main---2后main方法出栈,代码执行结束
因此最后输出结果为: