1.多态
同种类型的对象,表现出的不同形态(没有继承就没有多态) |
2.多态中成员访问的特点
成员变量:编译看左边,执行也看左边 编译看左边,javac编译代码的时候,会看左边的父类有没有这个变量,如果有编译成功,如果没有,则编译失败 运行看左边,java运行代码的时候,实际获取的就是左边父类中成员变量的值 |
成员方法:编译看左边,执行看右边(因为成员方法有重写) 编译看左边javac编译代码的时候,会看左边的父类有没有这个方法,如果有编译成功,如果没有编译失败 运行看右边,java运行代码的时候,实际上运行的子类中的方法,那么虚方法表中会把父类的方法进行覆盖 |
成员变量,在子类的对象中,会把父类的成员变量也继承下去 |
成员方法:如果子类对方法进行了重写,那么虚方法表中会把父类的方法进行覆盖 |
如果是属性,则调用属性的时候调用的是父类的属性 在java中加载字节码文件中永远是先加载父类,在加载子类 |
3.多态的好处与坏处
多态的优势:方法中使用父类型作为参数,可以接收所有子类对象 |
多态的弊端:不能使用子类的特有功能 |
4.多态中的转型:
若强行用子类的功能则需要进行类型转换,向上转型和向下转型 向上转型:从子到父(父类引用指向子类对象) 向下转型:从父到子(父类引用转为子类对象)cat a = (cat) m; |
强制类型转换可以把对象转换为真正的子类类型,从而调用子类独有的功能 强转的时候可以使用instanceof 关键字进行判断 |
5.final修饰符
6.权限修饰符
7.抽象方法:
抽象类:假如我们定义动物类给吃吃东西方法,但是不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。这样动物类就是一个抽象类(用abstract关键字修饰)
抽象类的子类,要么是抽象类,要么重写抽象类中的所有抽象方法 |
抽象类不能直接实例化那么,抽象类如何实例化呢? 答案:我们可以按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。 |
抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢? 答案是:用于子类访问父类数据时的初始化 |
成员变量:既可以是变量,也可以是常量。 构造方法:有, 用于子类访问父类数据的初始化。 成员方法:既可以是抽象的,也可以是非抽象的。 |
抽象类的成员方法特性: 抽象方法 : 强制要求子类做的事情。 非抽象方法: 子类继承的事情,提高代码复用性。 |
abstract不能和哪些关键字共存? private ,final 冲突 static 不能共存,没有 |