Java基础第四天--多态
来源:互联网 发布:ps如何制作淘宝详情页 编辑:程序博客网 时间:2024/05/05 13:45
1. 多态:同一个对象在不同时刻表现出来的不同状态
什么是多态:一句话--将子类引用赋值给父类引用,通过父类调用子类的重写方法
多态的前提:
1)要有继承关系 2)要有方法重写 3)父类引用指向了子类对象
注意:没有方法重写的多态是没有意义的
注意一点:多态是父类引用根据它指向的子类对象,动态地调用属于子类的该函数(Java没有virtual关键字,默认是根据引用指向的实际对象调用相应的方法),这样的函数调用在编译器是无法确定的(调用的子类的函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。
《Java编程思想》中说“不要犯傻,如果它不是晚绑定,它就不是多态”。
package 第十章继承的问题;class A{public static void prt(){System.out.println("1");}}class B extends A{public static void prt(){System.out.println("2");}}public class 子父类静态方法调用是多态吗 {public static void main(String[] args) {A a = new B();a.prt(); //不是晚绑定 不是多态 输出1}}
2. 多态的成员关系:
成员变量:编译看左边,左边没有就报错
运行也看左边
成员方法:编译看左边,左边没有就报错
运行看右边(方法有重写!!)
主要原因在于方法有重写,而变量没有
多态的弊端:父类不能使用子类的特有功能
3. 多态的好处:提高程序的可维护性和扩展性
如果希望程序的扩展性强,最好使用多态机制。一个基本原则就是能使用父类,就不用子类,父类可以调用子类对象
开闭原则:对修改关闭,对扩展开放
向下转型的时候,注意可能会有一个异常:ClassCastException
4. 抽象类:
一个方法,如果只有方法声明,没有方法体,那么说明这个方法不是具体的,而是抽象的
使用关键字abstract
为什么要有抽象类?因为抽象方法不完成功能,代码反而更多了。。。
使用抽象类及抽象方法的好处-->会强制要求子类必须完成某些功能
特点
1)在一个类中,抽象的方法是没有意义的,将来如果有一个类(非抽象类)继承了这个类,是必须重写该方法的
2)如果在一个类中,有抽象方法,该类必须被定义为抽象类;抽象类中可以有非抽象方法
3)抽象类是不能被实例化的
抽象类中:
成员变量:既可以是常量,也可以是变量
成员方法:既可以是抽象的,也可以是具体的
抽象方法:强制要求子类做事情
具体方法1:提高代码复用性(子类和父类的具体方法相同)
具体方法2:方法重写
抽象类中可不可以没有抽象方法?可以,作用是不允许外部创建对象
构造方法:有
面试题:抽象类不能实例化,但是却有构造方法,请问有什么作用?
因为子类的构造方法第一条语句是super(),所以抽象类要有构造方法,用于对子类访问父类的数据进行初始化
而不是为了创建对象
抽象类关键字abstract不可以和哪些关键字共存?
1)final final修饰的方法不能被重写,而abstract修饰的必须被重写,冲突
2)private private修饰的方法不能被重写,而abstract修饰的必须被重写,冲突
3)static static修饰的方法,可以直接通过类名来调用,而abstract修饰的方法没有方法体,调用没有意义
5. 接口 interface关键字 类实现 implements 接口
接口中的成员特点:
1)成员变量:接口中只有常量,它有默认修饰符:public static final
2)接口是没有构造方法的 实现接口的类的构造方法默认调用object()构造方法
接口不能被实例化,只能在子类中采用多态的方式实现
3)成员方法:接口中只有抽象方法,它有默认修饰符:public abstract
接口的思想特点:
1)接口的出现降低耦合性,而继承实际上是增加耦合性的
程序的要求:低耦合,高内聚
耦合:类与类的关联关系 内聚:自己完成功能的能力
程序的要求:效率和安全 为了安全,就要做很多校验,就会影响效率
2)接口可以用来多实现
单一规则:接口在定义规范的时候,功能尽量单一,因为类可以实现多个接口
接口的实现特点:
1)或者类本身是抽象类,抽象类不需要实现接口的功能
2)或者类实现接口的所有方法
类与接口是实现关系:
1)一个类可以单实现接口,也可以多实现接口(“多继承”)
2)一个类还可以在继承一个类的同时实现多个接口
接口与接口的关系:继承关系,可以单继承也可以多继承
类与类的关系:只能单继承
抽象类与接口的对比
共性:都是抽取出来的东西
不同点:
1)抽象类和接口的成员区别
抽象类:
成员变量:既可以是变量,也可以是常量
构造方法:有,用于子类访问父类数据的初始化
成员方法:既可以是抽象的,也可以是具体的
接口:
成员变量:public static final
成员方法:public abstract
2)类和接口的关系: 实现关系,可以单实现,也可以多实现
还可以在继承一个类的同时,实现多个接口
类和类的关系: 继承关系,只能单继承
接口与接口的关系:继承关系,可以单继承,也可以多继承
3)本质特征(什么时候用抽象类,什么时候用接口 设计)
抽象类被继承体现的是:is a 的关系。抽象类中定义的是这个体系的共性的内容
接口被实现体现的是:like a 的关系。接口中定义的是这个体系的扩展功能
6. 如何实现一个继承体系
分析:由具体到抽象
实现:由抽象到具体
学习:抽象的内容,因为它定义的是共性的内容
使用:具体的类,因为它才是真正的实现,具备最多的功能
- Java基础第四天--多态
- Java基础---第四天
- Java 基础 第四天
- JAVA基础第四天
- JAVA基础第四天
- java基础第四天
- java基础第四天
- java编程基础第四天
- java基础第四天笔记。
- Java基础学习第四天
- 【java基础】第四天总结
- Java基础复习第四天
- Java基础学习第四天
- JAVA基础学习第四天
- java基础第四天 循环
- 集合 java基础学习笔记 第四天
- 传智博客JAVA基础第四天
- Day04第四天java基础----------数组
- java的一些小程序的例子--1
- poj3274
- POJ 2528 线段树+离散化~
- tomcat不同版本所对应的JSP/Servlet版本
- [leetcode]Climbing Stairs
- Java基础第四天--多态
- FFmpeg源代码简单分析:libswscale的sws_scale()
- TCP建立连接和释放链接
- eclipse 搭建android5.0的开发环境
- asp.net的几个内置对象
- 机器学习 Python kNN算法
- Java 观察者模式( Observer Pattern)
- 接口和抽象类有什么区别
- 多态的内存图解