继承、封装、多态
多态(polymorphism)多态是OOP中的一个重要特性,主要用于实现动态绑定。换句话说,程序的最终状态只在执行过程中确定,而不是在编译过程中。这可以提高系统对于大规模系统的灵活性和可扩展性。
多态允许我们使用一个对象的一些方法,而不关注它的具体类型,从而实现更灵活的编程,提高系统的可扩展性。
为什么需要多态?
多态性是指允许不同种类的对象对同一条消息做出不同的响应。
如何在java中实现多态性?使用多态有什么好处?
有两种类型的参考变量:
编译时类型(模糊地说,通常是父类)
由申报时的类型决定。
运行时类型(运行时,哪个子类是哪个子类)
是由实际对应的对象类型决定的。通过动态绑定调用此对象的方法。动态绑定会让我们的编程更加灵活,但是会降低程序的运行速度。这也是JAVA比C++/C慢的主要原因之一。
多态性:如果编译时类型与运行时类型不一致,就会造成多态性。
方法绑定(方法绑定)
在执行调用方法时,系统可以根据相关信息在内存地址中执行代表该方法的代码。分为静态绑定和动态绑定。
静态绑定:
编译时完成可以提高代码执行速度。
动态绑定:
对象调用的方法采用动态绑定机制。虽然这使我们在编程上很灵活,但它降低了代码执行的速度。这是JAVA比C/C++慢的主要原因之一。在JAVA中,除了final类、final party和static方法之外的所有方法都是在运行时由JVM动态绑定的。
应该为成员变量和静态方法提供关于动态绑定的特殊课程:
http://blog.sina.com.cn/s/blog_600046120100wdza.html
http://blog.csdn.net/aaaaaaaa0705/article/details/6263213
http://www.doc88.com/p-389664843916.html
使用多态性的要点
1.多态是方法的多态,属性没有多态。
2.编写程序时,如果要调用运行时类型的方法,只能转换类型。否则,它将无法通过编译器的检查。但是,如果强制转换两个不相关的类,将会报告ClassCastException。比如,它本来是一只狗,但是我把它变成了一只猫。会报告这个异常。
3.多态性的存在有三个必要条件:继承、方法重写和指向子类对象的父类引用
对象转换(铸造)
为什么我需要铸造一个类型?
引用变量只能调用其编译类型的方法,而不能调用其运行类型的方法。这时候就需要铸型了!
一个父类的引用类型变量可以“指向”其子类的对象。一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用 引用 变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)课堂代码package cn.bjsxt.oop .多态;
公共级动物{
String str
public void voice(){
System.out.println("普通动物的叫声!");
}
}
猫类延伸动物{
public void voice(){
System.out.println("喵喵");
}
public void CaptMouse(){
System.out.println("抓老鼠");
}
}
狗类延伸动物{
public void voice(){
system . out . println(" Wang Wang ");
}
public void seeDoor(){
System.out.println("看门人!");
}
}
虎类延伸动物{
public void voice(){
System.out.println("哇哇");
}
}
猪类延伸动物{
public void voice(){
system . out . println(" hem ");
}
}
package cn.bjsxt.oop .多态;
公共类测试{
公共静态无效测试动物声音(动物c){
c . voice();
if(Cat的c实例){
((Cat) c)。catch Mouse();
}
}
/*
public static void testAnimalVoice(Dog c){
c . voice();
}
public static void testAnimalVoice(Pig c){
c . voice();
}*/
//贾维克·Test.java
// java测试
公共静态void main(String[] args) {
动物a =新猫();
Cat a2 =(Cat)a;
testAnimalVoice(a);
//a2 . catch Mouse();
//动物b =新狗();
//Animal c = new Tiger();
//testAnimalVoice(b);
//testAnimalVoice(c);
}
}
1.《面向对象方法 面向对象—多态》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《面向对象方法 面向对象—多态》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/788435.html