day09多态、接口、抽象类
2017-06-11 12:20
204 查看
图片可能看不清,右键另存到桌面上打开就清晰了
多态:继承+方法重写+父类引用指向子类对象多态中的成员变量的访问:编译看左面,运行看左面
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等等)
接口(拓展功能)和抽象类(共性功能)的区别:
相关文章推荐
- 重踏学习Java路上_Day09(final,多态,抽象类,接口)
- C#多态的实现:虚方法、抽象类、接口
- Python面向对象之接口、抽象类与多态详解
- Java之多态,抽象类,接口
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- 《day09---继承-抽象类-接口》
- 多态之抽象类与接口
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- Java基础-09总结final,多态,抽象类,接口
- 基于多态之虚方法、抽象类、接口详解
- final关键字、多态、抽象类、接口的特点及其使用
- [Java] 继承,隐藏,覆盖,重载,多态,抽象类,接口
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- java基础(2)-基础类型和语法(static、内部类、final、抽象类、接口、封装)(并将这些基础知识与java的三大特征关联(继承、多态、封装))
- 抽象类 ,接口,实例,多态的理解
- (7)抽象类、接口、多态、内部类(匿名内部类)、异常(自定义异常)
- php基础6---抽象类与接口与多态
- 黑马程序员--继承,覆盖,抽象类,接口,多态。
- 多态,抽象类与接口
- 抽象类和接口作为形式参数 多态 抽象类和接口虽然都不能直接创建对象,但是可以通过多态进行对象的创建