day09多态、接口、抽象类
来源:互联网 发布:摄像头软件 编辑:程序博客网 时间:2024/06/07 01:09
图片可能看不清,右键另存到桌面上打开就清晰了
多态:继承+方法重写+父类引用指向子类对象
多态中的成员变量的访问:编译看左面,运行看左面
Father f=new Son(); 因为使用Father类型做引用来指向new son()的地址,所以他只能访问到它自己的成员变量,所以结果为10
Son s=new Son(); s指向对象的内存地址,因为它有自己的num,所以运行时就用自己的num,而不是父类father的num(就近原则),所以结果为20
多态中非静态成员方法的的访问:编译看左边,运行看右面
Father f=new Son(); f.print(); java编译时,要看左边,也就是Father类,如果Father类中没有print()方法就会编译出错(找不到该方法),而运行时会去找子类中重写的该方法!!!所以多态也叫动态绑定,输出结果为 son。也就是说,用父类引用指向子类对象,如Father f=new Son(); 访问成员方法时,会去访问子类中重写的该方法(父类中必须存在该方法,不然编译出错)。如果子类中不存在print()方法,就访问父类自己的print()方法,输出结果为 father。
Son s=new Son(); s.print() ; 这样的话就回去访问son自己的print()方法,没啥说的,结果为 son。
多态中静态成员方法的的访问:编译看左边,运行看左面
非静态方法是动态绑定,静态方法就不会动态绑定,而且静态方法是和类相关的,Father类的print方法是属于他自己的,Son类的也是,根本不是重写!!! 所以f.print();其实就是Father.print();
如果是接口,道理也是一样:
Collection list=new ArrayList();
list.add(“hello”); 这里编译用的是Collection中的方法,(eclipse中alt+/会提示是Collection下的方法)。
而运行时一定是ArrayList中的方法,因为Collection中的方法都是抽象的!!
转型:子类对象可以默认转化为父类对象,但是反过来要进行强制转换。转型可以访问子类或父类特有的方法!如,Person p=new SuperMan(); 当我要访问fly()方法时,就要向下转型!
多态的好处:可以接收任意子类对象
弊端:不能使用子类特有的属性和行为(向下转型就可以访问啦!)
抽象类:
不能new去实例化,所以由具体的子类去实例化,这也是多态:抽象类多态
抽象类的特点,为什么要有抽象类!!
面试题:
abstract不能和static共存:因为抽象方法是static静态的,就可以用类名去访问了,这样抽象类就没意义了;
abstract不能和final共存:因为被final修饰的方法不能被子类重写,而子类继承抽象类一定要重写所有父类的抽象方法(除非这个子类也是抽象类),这是矛盾的;
abstract不能和private共存:被abstract修饰的方法是为了让子类看到并强制重写,而被private修饰的方法,是继承不了的,也是矛盾的。
接口(对外提供规则)!!!
就像java访问数据库,sun公司提供了接口,其余的具体怎么实现由各厂商自己来写api(如jdbc xxxx等等)
接口(拓展功能)和抽象类(共性功能)的区别:
- day09多态、接口、抽象类
- Day09 多态 抽象方法 借口
- java笔记--day09--接口(三)抽象类和接口的区别
- 毕向东Java视频学习笔记【Day09 继承+接口+抽象类】
- java笔记--day09--抽象类(一)
- java笔记--day09--抽象类(二)
- 多态,抽象类,接口
- 抽象类、接口、多态
- 多态、抽象类、接口
- 抽象类 接口 多态
- 多态、抽象类、接口
- 多态,抽象类,接口
- 抽象类 接口 多态
- 多态,抽象类,接口
- 抽象类 接口 多态
- 多态 抽象类 接口
- 多态,抽象类,接口
- 多态-抽象类-接口
- Hibernate一对多映射
- saltstack学习-基本介绍和安装
- Ubuntu中安装Nvidia闭源驱动
- DNS在架构设计中的巧用
- 线程安全与可重入函数
- day09多态、接口、抽象类
- 【GDSOI2017】 逃亡
- 当爬虫没抓到数据的时候(漫画)
- fastjson 转嵌套List<Bean>时的问题
- OpenCL读取内核cl文件
- SQL查询重复数据
- Spark安装并运行WordCount示例
- OpenCL编程之同步问题:事件
- Mweb汉化