作用1 : 代码复用 作用2: 代码扩展
人类中的继承: 继承了特征与行为方式 oop中的继承:相同,但是是范围较大类与较小的类之间能有继承关系 如 人----学生----大学生----理科大学生 理解复用与扩展 继承的语法: extends (c#中的 子类:父类) 效果:子类能够自动的拥有父类中所定义的方法与属性(公有,受保护)
继承的要点: 1.继承是单向的 子类继承父类 2.继承是单继承 子类只允许有一个父类(Java中) 3.只能继承父类公有的成员,私有的不能继承 4. 不可被继承 :私有 构造 静态方法
继承中的构造 :
1.子类构造函数会自动调用父类构造函数,所有的构造函数都隐藏了一句super(); 2.父类构造函数有参数,则在写子类时 需要用super()传递参数给父类 3.父类又叫基类,子类又叫超类,必须先创建出父类对象在其之上才能创建子类对象 所以必须先调用父类构造函数 4.super.父类成员:super的第二种用法,在子类中调用父类成员。同时还能区分父类与子类中同名的属性(方法同名则另说)
访问权限:
所有成员无论何种修饰符在本类内部都可以相互访问 1.public 在本类中或任何其他类中都是可见可直接访问的,无论是在同包还是不同包,无论是去访问还是被继承。 2.private 只能在本类中直接使用,在任何其他位类中都是不可见不可直接访问的,无论是在同包还是不同包,无论是去访问还是被继承。 3.缺省 在同包中使用或继承时可见(如同public),在不同包去使用或继承均不可见(如同private)-- 包内友好 4.protected(受保护) 在同包中使用或继承时可见(如同public),在不同包使用时不可见,继承时可见。 --继承友好 5.被继承的属性与方法,在子类中访问权相会与父类相同 public >protected > 缺省>private
类的访问权限
public 缺省:只能在同包内使用
多态:
父类子类中有同名方法 电话: 固定电话/手机
A.重写
1.在继承中实现重载 继承中方法名相同 但参数不相同 2.重写:在继承关系中方法名,参数 ,返回类型(总称方法原型)都完全相同 执行过程不同 则叫重写 3.重写的目的与含义:父类与子类有需要实现的相同功能,但实现的方式不一样 座机电话 移动电话 都能通话 但实现方式不相同 4.对于访问权限,则要求子类的访问权限大于等于父类 5.父类对象 调用的形式是父类中定义的 子类对象 调用时 会自动选择子类中的实现形式,不会在出现父类中的形式 所以 重写又可称之为 覆盖
××××该调用那种方法,是由对象的类型决定的××××
B.引用转型
1.以前的创建对象的方式 都是 同类引用 指向 同类的 对象 People p = new People(); 2.在继承关系中 可以使用父类引用指向子类实例 好比我需要通讯工具,提供手机,座机 都属于通信工具 但子类引用不能指向父类对象 我需要手机,不能拿座机给我 3.在此前提下,父类引用先指向父类实例,调用重写的方法 然后 该引用再次又指向子类实例,也调用重写方法 可以看出,结果完全不相同,这就是多态
C.多态:
1概念:相同或相似的代码,执行的结果并不相同
2.动态多态:在继承关系中,父类与子类实现方法重写,并以引用转型的方式创建对象 完全相同的代码执行结果却不相同。
3.静态多态:方法重载,代码相似(参数不相同),执行结果也不相同。 4。静态多态在编译代码时已经知道该执行什么操作 动态多态,代码必须到运行是才知道该执行什么代码
D。强制类型转换
父类引用可以指向子类实例,但是不能直接调用子类特有方法 使用引用转型 (MobilePhone)phone 则能调用
将父类引用强制转型为子类引用
E.instanceof
类型兼容才可转换,不兼容则不能转换。 固定电话 不能强制转换成手机 在转型前 可以先判断 使用instanceof操作符: phone istanceof MobliePhone 判断该引用的实例是不是所指定的类型
F.继承与方法
参数类型是父类 传入的实参则可以 是任何子类的实例 返回值 同上
这也是引用转型的实现模式之一
E. finally finalize() 析构函数
子父类写同名方法的条件(要有继承关系,private就不存在继承): 1.方法名必须一样(行为一样) 2.参数一样,如果参数不一样就构成子父类的方法重载 3.返回值不一样报错 4.只有在方法名、返回值、参数列表一样的情况下才构成方法重写(方法覆盖) 子类的访问修饰符必须要大于或等于父类的访问修饰符
多态:同一种行为的多种表现形式 方法重载和方法重写都是多态,重载叫静态多态,重写叫动态多态 重载是行为相同,参数不同,决定做不同的事情;重写是行为相同,对象不同,决定做不同的事情
多态的条件(三个条件缺一不可):
1.要有继承关系 2.要有方法重写 3.要有类型转换,父类的引用指向子类的实例