0、继承的由来?
将多个类中共同的内容放在一个类中,然后其他类使用的时候不必再重新定义所需的内容,简化了程序。文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
1、定义
把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。这样的话,多个类就可以省略很多代码。这个关系就是继承。java中用[code]extends[/code]关键字表示。文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
2、生活中的继承 and java中的继承
1)生活中有:财产,古代的皇位文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
2)java中的继承有:文章源自亦枫博客-https://yflad.cn/2008.html
- 类与类之间的继承
- 成员变量,成员方法
- 哪些内容可以继承?
- 属性和行为
文章源自亦枫博客-https://yflad.cn/2008.html
3、如何继承 以及 体系结构
1)用关键字 [code]extends[/code]文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
2)继承的体系结构文章源自亦枫博客-https://yflad.cn/2008.html
A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。文章源自亦枫博客-https://yflad.cn/2008.html
B:继承体系的学习和使用原则文章源自亦枫博客-https://yflad.cn/2008.html
学习顶层的内容。因为他是整个体系的共性内容。文章源自亦枫博客-https://yflad.cn/2008.html
创建子类使用。也就是使用底层的具体对象。文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
文章源自亦枫博客-https://yflad.cn/2008.html
4、继承有哪些特点?
- 继承父类拥有的非私有的成员变量,成员方法
- 子类可以拥有自己的成员变量和成员方法
- 如果子类重写了父类的方法,则执行方法的时候,实行的是重写后的成员方法
- 类与类之间只能单继承(一个子类只能有一个父类,一个父类可以有多个子类)
- 类可以多重继承
文章源自亦枫博客-https://yflad.cn/2008.html
5、继承的好处和弊端:
1)好处:文章源自亦枫博客-https://yflad.cn/2008.html
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
2)弊端:
违背了软件工程理念:低耦合,高内聚
低耦合:
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉
高内聚:
低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用
6、子父类中的成员关系
A)成员变量
在子类方法中使用一个变量时:
首先,在方法的局部变量中找这个变量,有则使用。
否则,在本类中找成员变量,有则使用。
否则,在父类中找成员变量,有则使用。
否则,报错。
B)成员方法
用子类对象使用一个方法时。
首先,在子类中找这个方法,有则使用。
否则,在父类中找这个方法,有则使用。
否则,报错。
例:
package cn.yflad.oop; /* * 继承.父类 */ public class Father { String name; int age = 16; public void study() { System.out.println("姓名:" + name + ",年龄" + age + ",在吃东西"); } }
package cn.yflad.oop; /* * 继承.子类 */ public class Son extends Father { // 单继承 // 1.继承父类拥有的非私有的成员变量和成员方法 // 2.子类可以拥有自己的成员变量和成员方法 int age = 22; public void sonStudy() { System.out.println(name + age + "打豆豆"); } }
package cn.yflad.oop; /* * 继承.“孙子辈” */ public class SonSon extends Son { // 子类多重继承,既继承了父类也继承了爷爷类 String gender; public static void main(String[] args) { Father fatherSon=new Father(); fatherSon.name="老父"; fatherSon.study(); } }
package cn.yflad.oop; /* * 继承.测试 */ public class Test { public static void main(String[] args) { SonSon sonson=new SonSon(); //孙子既继承了父亲的,也继承了爷爷的 sonson.name = "李四"; sonson.study(); sonson.sonStudy(); } }
7、重写和重载的区别?
1)重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
1)重写:在不同类中(子父类中)。方法声明相同(返回类型,方法名,参数列表均相同)。
2)重写需要注意:
子类方法的访问权限要大于等于父类方法的访问权限。
静态只能重写静态。但是这种情况一般不会出现。
8、构造方法
1)子类的实例化过程:
子类创建对象时,会先去创建父类的对象。默认是去调用父类的无参构造方法。
2)子类构造方法中,第一行默认是super(),以及为什么?
因为他继承父类的成员使用,使用前这些成员必须初始化,而他们是父类的成员,所以,必须通过父类进行初始化。
所以,会先创建一个父类的对象。当父类没有无参构造方法时,必须使用this或者super调用其他的构造方法。
9、this和super的区别
1)this:代表本类对象的引用。
2)super:代表父类的存储空间。