黑马程序员------面向对象(No.6)(接口、多态)
来源:互联网 发布:三星电话交换机编程 编辑:程序博客网 时间:2024/06/06 08:34
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
接口
格式: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);//输出3System.out.println(Test.NUM);//输出3System.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(){}}
多态
多态:可以理解为事物存在的多种体现形态。
人:男人、女人;
动物:猫、狗;
猫 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
- 黑马程序员------面向对象(No.6)(接口、多态)
- 黑马程序员----java面向对象03(接口、多态)
- 黑马程序员 面向对象 接口
- 黑马程序员------面向对象(No.5)(final、抽象类)
- 【黑马程序员】- 面向对象_多态_接口
- 黑马程序员--面向对象学习---接口、多态、内部类、异常
- 黑马程序员-JAVA面向对象之抽象、接口、多态
- 黑马程序员_面向对象_多态&接口
- 黑马程序员 Java面向对象<二> 继承、多态、接口
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- 黑马程序员——面向对象的继承、接口、多态
- 黑马程序员 面向对象(下) 抽象类与接口
- 黑马程序员__java基础__面向对象(继承、接口)
- 黑马程序员——面向对象(继承、抽象、接口)
- 黑马程序员 01 面向对象的接口
- 黑马程序员-面向对象 继承,final,接口
- 黑马程序员----面向对象之“接口”
- 黑马程序员---面向对象之接口2
- hdu 1874 畅通工程续(最短路径)
- trie树练习 Hat’s Words
- Unity3D和网页数据交互的基本原理
- trie树Message Flood
- 阿里巴巴程序设计大赛结题报告
- 黑马程序员------面向对象(No.6)(接口、多态)
- 堆排序 hdu 2020 绝对值排序
- (拓扑排序 )hdu 2094 产生冠军
- 排序
- 拓扑排序hdu 3342 Legal or Not
- 拓扑排序 hdu 2647 Reward
- 【考研数学】数学满分秘籍、考研数…
- 阿牛的EOF牛肉串
- 最短路径问题 hdu 3790