java 中的继承学习笔记

来源:互联网 发布:网络直播p2p技术简介 编辑:程序博客网 时间:2024/05/22 17:12

一、为什么会有继承

在大千世界中存在继承,比如我们继承了5千年中华文化,也就是说我们具有对中华文化的基本特征,儿子继承了父亲母亲的基因等;在java中有时候会出现类似这种情况,多个类中存在相同的属性和行为,我们可以将这些相同的属性和行为抽取到同一个类中,那么多个类就无需再定义这些行为和属性,只要继承那个类即可。多个类可以称为子类,单独的这个类可以称为父类或者超类。子类可以直接访问父类中的非私有属性和行为。

二、继承的优点

1.提高了代码的复用性。

2.让类之间产生了关系,有了这个关系,继而产生了多态的特性。

注意:千万不要为了获取其功能、简化代码而继承。必须是子类和父类之间存在所属关系,才可以继承。

三、java继承的特定

1.java只支持单继承,不支持多继承(主要原因多继承会导致子类调用父类方法的不确定性,容易带来安全隐患)。但是java支持多层继承。

2.父类中有的,子类也有,而且子类可以改变,也就是说子类可以根据需要更改父类的属性值,重写父类的成员方法,父类没有的子类也可以进行增加。使用父类体系功能的方法:想要使用体系,先查阅父类的描述,因为父类定义了体系共性功能。通过了解共性功能,可以知道该体系的基本功能。那么这个体系就可以就可以基本使用了,在具体调用时要创建子类对象,原因是可能父类不能创建对象和创建子类对象可以使用更多的功能。简称查阅父类功能,创建子类使用功能。

3.父类的属性和方法可以被继承,当构造方法不能被继承,子类的构造方法隐藏的调用父类的无参数构造函数,当父类没有无参构造函数时,子类需要用super来显示调用父类的构造函数。

三、举例说明

 背景 学生继承了人类,拥有了人类成员变量和方法。

class Person{

String name;

int age;

Person(){}

public void sleep(){

System.out.println("sleep");

}

public void eat(){

System.out.println("eat");

}

}

class Student extends Person{   //学生继承了人类的格式

public void study(){

System.out.println("good good study ");


}

四、继承后子类和父类的关系

(一)成员变量

1.子类继承了本省没有的成员变量。

2.当子类中有和父类同名的成员变量时。函数调用的是子类的变量。

3.当子类函数中有局部变量和成员变量同名,在函数中调用的是局部变量。

简单的说:先在局部范围内找,其次在本类中找,最后在父类中找。如果找到,立马运行,找不到,报错。

(二)成员函数

1.父类的函数和子类的函数没有同名的情况。子类就把父类的函数直接继承过来使用。

2.子类中存在了和父类同名的函数时,子类就回调用自己的函数。这种现象在java中称为“重写”、“复写”、“覆盖”。

简单的说:用子类对象调用方法时,首先在子类中找,其次在父类中找。

注意1.当子类继承了父类,也就沿袭了父类的功能到子类中,但是子类虽具备了该功能,但是内容不一样时,没有必要重新定义新功能,而是使用复写,保留父类中功能的定义,并复写功能内容。

2.重载和重写的区别  

重载 是在函数之间发生的,当两个函数的参数列表不同时就发生了重载,即在同一类中,函数名相同,参数列表不同的两个函数间发生了重载。

重写 父类和子类的方法一模一样的情况下发生的。条件,存在于子父类之中,函数的名称和参数完成一致,子类的访问权限不能低于父类的访问权限。

3.父类的静态函数只能被子类的静态函数重写。

4.父类的私有函数不可以被覆盖,在子类覆盖父类的方法种,要想继续使用覆盖的父类的方法时,可以通过super.方法名  来获取。this代表了本类对象的引用吗,super代表了父类所属空间,并不是一个对象。






原创粉丝点击