六、面向对象之继承


1.概念
如果两个或者两个以上的类,具有相同的属性和方法的话,我们可以抽取一个类出来,在抽取出来的类中声明各个类中公有的属性和方法

被抽取出来的类---父类、超类、基类
两个或者两个以上的类---子类、派生类


他们之间的关系----子类继承自父类

2.语法:
父类
访问权限修饰符 class 父类类名{
//公有的属性和对应的方法
}
子类
访问权限修饰符 class 子类类名 extends 父类类名{
特有的属性和方法
}


结论:
子类可以访问到父类中能看见的【在访问权限内的,除了private】所有属性
子类可以访问到父类中能看见的【在访问权限内的,除了private】所有方法
构造方法不能被继承,每个类都应该有自己的独特的构造方法
实例化子类对象的时候,不管调用的是子类的哪一个构造方法,都会默认去调用父类无参的构造方法
一个父类有多个子类
一个子类只能有一个父类【单继承】
类之间,Java支持多重继承不支持多继承
举例说明:A B C
多继承:A exteds B,C【这是不支持的】
多重继承:A extends B B exteds C


3.子类对象实例化的过程
子类对象在实例化的时候,先实例化父类部分,然后实例化子类部分

对象在内存中生成的过程
a.将对象所需的类文件加载入文件
b.在内存中的栈空间开辟相应的空间
c.通过new关键字在对内存中开辟空间
d.将对象中的非静态的成员变量赋值,
e.调用对应的构造方法,给成员变量赋值
f.通过子类的构造方法默认的去调用父类的构造方法,初始化父类部分

4.super关键字
this:表示对当前对象的引用
super:表示对父类对象的引用
a.super.属性 表示访问父类中的成员变量
b.super.方法 表示访问父类中的方法
c.super() 调用父类中的构造方法

super.属性和this.属性获取到的结果一样的【除了private修饰的属性】
super.方法和this.方法相当与调用了同一个方法

注意问题:
尽量避免子类中出现和父类同名的成员变量
如果在子类中出现了和父类中同名的方法,this.方法调用当前类中的方法,覆盖父类同名的方法


this():
a.只能出现在子类构造方法第一行
b.只能出现一次
c.具体调用的是父类中的哪个构造方法,取决于所传的参数
d.this()和super()不能同时出现


继承的总结:
1>对于类而言,Java中使用的单继承【一个子类只能有一个父类】
2>要将确实存在继承关系的类设计为继承,可以最大限度上提高代码的复用性
3>子类可以从对应的父类中继承在访问权限内的属性和方法
4>父类中的构造方法不能被子类继承【每个类中都有自己特有的构造方法】

原文地址:https://www.cnblogs.com/lsp-lsp/p/7341917.html