黑马程序员------面向对象(No.6)(接口、多态)
2013-09-11 19:35
162 查看
----------------------
ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
接口
格式:interface{ }
接口中的成员修饰符是固定的。
1.成员常量:public static final
2.成员函数:public abstract
接口的出现,将“多继承”通过另一种形式体现出来,即“多实现”。
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部重写后,子类才可以实例化。否则,子类是一个抽象类
编译后产生三个.class文件:Inter.class、Test.class、InterfaceDemo.class
接口的特点:
1.接口是对外暴露的规则。
2.接口是程序的功能扩展。
3.接口可以用来多实现。
4.类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
5.接口与接口之间可以有继承关系。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
多态
多态:可以理解为事物存在的多种体现形态。
人:男人、女人;
动物:猫、狗;
猫 x = new 猫( );
动物 x = new 猫( );
1.多态的体现
父类引用指向子类对象(父类的引用可以接收自己的子类对象)。
2.多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提,就是存在覆盖(重写)。
3.多态的好处
多态的出现大大的提高了程序的扩展性。
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
我们能转换的是父类应用指向了自己的子类对象事,该应用可以被提升,也可以被强制转换。多态自始自终都是子类对象在做着变化。
5.多态的应用
6.多态的出现代码中的特点(多态使用注意事项)
在编译时期,参阅引用型变量所属类中是否有调用的方法。如果有,编译通过,如果没有则编译失败。
在运行时期,参阅对象所属的类中是否有调用方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员的特点:
无论编译和运行,都参考左边。
(视频出处:传智播客毕向东Java基础视频教程-day08-05-面向对象(多态中成员的特点).avi)
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net
ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
接口
格式:interface{ }
接口中的成员修饰符是固定的。
1.成员常量:public static final
2.成员函数:public abstract
接口的出现,将“多继承”通过另一种形式体现出来,即“多实现”。
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部重写后,子类才可以实例化。否则,子类是一个抽象类
/* 接口:是不可以创建对象的,因为有抽象方法。 需要被子类实现,子类对接口中的抽象方法全部重写后,子类才可以实例化。 否则,子类是一个抽象类 */ interface Inter{ public static final int NUM = 3; public abstract void show(); } class Test implements Inter{ public void show(){} } class InterfaceDemo{ public static void main(String[] args){ Test t = new Test(); System.out.println(t.NUM);//输出3 System.out.println(Test.NUM);//输出3 System.out.println(Inter.NUM);//输出3 } }
编译后产生三个.class文件:Inter.class、Test.class、InterfaceDemo.class
interface A{ void methodA(); } interface B{ void methodB(); } //可以多继承 只在接口与接口之间 interface C extends A,B{ void methodC(); } class D implements C{ public void methodA(){} public void methodB(){} public void methodC(){} }
接口的特点:
1.接口是对外暴露的规则。
2.接口是程序的功能扩展。
3.接口可以用来多实现。
4.类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
5.接口与接口之间可以有继承关系。
abstract class Student{ //每个学生都有自己学习功能的实现,所以定义成抽象方法。由子类实现该功能 abstract void study(); //每个学生都有相同的sleep功能。 void sleep(){ System.out.println("sleep"); } } //扩展功能要放在接口中,要扩展这个功能,就实现这个接口。 interface Smoking{ void smoke(); } //实现了Smoking接口。具有Smoking功能。 class ZhangSan extends Student implements Smoking{ void study(){} public void smoke(){} } //没有实现Smoking功能。 class LiSi extends Student{ void study(){} }
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
多态
多态:可以理解为事物存在的多种体现形态。
人:男人、女人;
动物:猫、狗;
猫 x = new 猫( );
动物 x = new 猫( );
1.多态的体现
父类引用指向子类对象(父类的引用可以接收自己的子类对象)。
2.多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一个前提,就是存在覆盖(重写)。
3.多态的好处
多态的出现大大的提高了程序的扩展性。
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
abstract class Animal{ public abstract void eat(); } class Cat extends Animal{ public void eat(){ System.out.println("吃鱼"); } public void catchMouse(){ System.out.println("抓老鼠"); } } class Dog extends Animal{ public void eat(){ System.out.println("啃骨头"); } public void kanJia(){ System.out.println("看家"); } } class DuoTaiDemo{ public static void main(String[] args){ //父类引用指向子类对象(父类的引用可以接收自己的子类对象)(类型提升)(向上转型) Animal a = new Cat(); a.eat(); //如果想要调用猫的特有方法时,如何操作? //强制向下转型 Cat c = (Cat)a; c.catchMouse();//输出 抓老鼠 //这种方式错误,这种方式就是将父类对象转成子类类型。 //我们能转换的是父类应用指向了自己的子类对象事,该应用可以被提升,也可以被强制转换。 //多态自始自终都是子类对象在做着变化。 //Animal a1 = new Animal(); 同时抽象类也不能直接被实例化 //Cat c1 = (Cat)a1; fun(new Dog()); fun(new Cat()); } public static void fun(Animal a){ a.eat(); if(a instanceof Cat){ Cat c = (Cat)a; c.catchMouse(); } if(a instanceof Dog){ Dog d = (Dog)a; d.kanJia(); } } }
我们能转换的是父类应用指向了自己的子类对象事,该应用可以被提升,也可以被强制转换。多态自始自终都是子类对象在做着变化。
5.多态的应用
/* 基础班学生: 学习、睡觉 高级版学生: 学习、睡觉 */ abstract class Student{ public abstract void study(); public void sleep(){ System.out.println("躺着睡"); } } //将操作Student的方法封装成类 class DoStudent { public void doSome(Student stu){ stu.study(); stu.sleep(); } } class BaseStudent extends Student{ public void study(){ System.out.println("base study"); } public void sleep(){ System.out.println("坐着睡"); } } class AdvStudent extends Student{ public void study(){ System.out.println("adv study"); } } class DuoTaiDemo{ public static void main(String[] args){ //BaseStudent bs = new BaseStudent(); //bs.sleep(); //bs.study(); //AdvStudent as = new AdvStudent(); //as.sleep(); //as.study(); DoStudent ds = new DoStudent(); ds.doSome(new BaseStudent()); ds.doSome(new AdvStudent()); } }
6.多态的出现代码中的特点(多态使用注意事项)
在编译时期,参阅引用型变量所属类中是否有调用的方法。如果有,编译通过,如果没有则编译失败。
在运行时期,参阅对象所属的类中是否有调用方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员的特点:
无论编译和运行,都参考左边。
(视频出处:传智播客毕向东Java基础视频教程-day08-05-面向对象(多态中成员的特点).avi)
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- 黑马程序员—Java面向对象(抽象类、模板方法设计模式、接口、多态、内部类)
- 黑马程序员-Java的面向对象(抽象类、接口、内部类和继承、组合、多态)
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- 黑马程序员——java-面向对象二(继承,多态,抽象,接口,包,内部类)
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- 黑马程序员——面向对象——多态-抽象类-接口
- 【黑马程序员】- 面向对象_多态_接口
- 黑马程序员——面向对象(多态+接口实现)-第18天
- 黑马程序员面试题面向对象二(多态,抽象类abstract,接口Interface,内部类,异常Exception,包package,String类,StringBuffer)
- 黑马程序员---面向对象:继承、抽象、接口和多态
- 黑马程序员------毕老师视频笔记第八天------面向对象(接口多态的应用示例)
- 黑马程序员-面向对象-接口和多态
- 黑马程序员-17-java基础-面向对象(3)-继承、抽象类、接口与多态
- 黑马程序员 Java面向对象(继承,抽象类,接口,多态,内部类)
- 黑马程序员——面向对象(下)— 重写、多态、抽象、接口
- 黑马程序员--Java学习日记之面向对象(多态,接口和其他关键字)
- 黑马程序员—面向对象的一些特征、继承、接口与多态
- 黑马程序员--JAVA<面向对象>--构造函数、抽象类、接口、多态