(1)减少代码的冗余,提高代码的复用性;
(2)便于功能的扩展
(3)为之后多态性的使用,提供了前提
2.继承性的格式:
class A extends B{ }
A:子类,派生类,subclass
B:父类,超类,基类,superclass
体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的所有属性和方法;
特别的,父类中声明为private的属性和方法,子类继承父类以后,仍然认为获取了父类中的私有结构
只是由于封装性的影响,使得子类不能直接调用父类的结构而已。
子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的拓展。
子类和父类的关系,不同于子集和集合的关系。
extends:延展,扩展
4.java中继承性的说明:
(1)一个类可以被多个子类继承。
(2)java中类的单继承性:一个类只能有一个父亲
(3)子父类是相对的概念
(4)子类直接继承的父类,称为直接父类;简接继承的父类称为:间接父类
(5)子类继承父类之后,就获取了直接父类以及所间接父类中声明的属性和方法。
定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置,覆盖。程序执行时
子类的方法将覆盖父类的方法。
要求:
(1)子类重写的方法必须和父类被重写的方法具有相同的 方法名称,参数列表
(2)子类重写方法的返回值类型不能大于父类被重写方法的返回值类型
(3)子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
子类不能重写父类中声明为private的方法
(4)子类抛出的异常不能大于父类被重写方法的异常;
1.super可以理解为:父类的
2.super可以调属性,方法,构造器
3.super的使用:调用属性和方法
(1)我们可以在子类的方法或构造器中。通过使用“super.属性”或super.方法的方式,显式的调用
父类中声明的属性和方法。但是通常情况下,我们习惯省略“super”。
(2)特殊情况:当子类和父类定义了同名的属性时,我们要想在子类中调用父类中声明的属性,
则必须显式的使用“super.属性”的方式,表明调用的是父类中声明的属性。
(3)特殊情况,当子类重写了父类中的方法以后 ,我们想在子类的方法中调用父类中被重写的方法时
则必须显式的使用“super.方法”的方式,表明调用的是父类中被重写的方法/
(1)我们可以在子类的构造器中显式的使用“super(形参列表)的方式”,调用父类中声明的指定的构造器
(2)“super(形参列表)”的使用,必须声明在类构造器的首行;
(3)我们在类的构造器中,对于this和super只能二选一,不能同时出现
(4)在构造器的首行中,没有显式的声明this(形参列表)或super(形参列表),则默认调用的是
父类中的空参构造器;
子类实例化全过程:
1.从结果上来看:(继承性)
子类继承父类之后,就获取了父类中声明的属性和方法。
创建子类的对象,在堆空间中,就会加载所有父类中声明的属性
2.从过程上来看:
当我们通过子类的构造器创建子类的对象时,我们一定会直接或间接的调用其父类的构造器,进而调用
父类的父类的构造器,直到java.lang.Object类的空参构造器为止,正因为加载过所有的父类的结构,所以
才可以看到内存中有父类的结构,子类对象才可以考虑进行调用
多态性是面向对象中最重要的概念,在java中的体现:
对象的多态性:父类的引用指向子类的对象
》可以直接应用在抽象类和接口上
java引用变量有两个类型:编译时类型和运行时类型,编译时类型由声明该变量时的使用类型决定,运行时的类型由实际赋给该变量的对象。简称:编译时,看左边;运行时,看右边。
多态的使用:
当调用子父类同名同参数时,实际上执行的是子类重写父类的方法----虚拟方法调用
多态性的前提:1.类的继承性 2.方法的重写
多态性不适用于属性;
虚拟方法调用;正常的调用:
person e=new person();
e.getinfo();
Student e=new Student();
e.getinfo();
虚拟方法的调用(多态情况下)
子类定义了与父类同名同参的方法,在多态的情况下,将此时父类的方法称为虚拟方法。父类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法确定的。
编译时的类型和运行时的类型
编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getinfo()方法



