面像对象 多态与抽象
2014-04-20 22:13
127 查看
多态
相同的行为,不同的实现 同样类型的变量,调用同样的方法,却产生不同的行为。
要理解多态性,首先要知道什么是“向上转型”和“动态绑定“。
向上转型:比如一个父类父类Animal和一个子类cat,我们可以说这只猫是动物,但是不能说动物就是只猫。因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的。
动态绑定:在运行时根据具体对象的类型进行绑定。若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。
java当中的向上转型或者说多态是借助于动态绑定实现的,所以理解了动态绑定,也就搞定了向上转型和多态。
例
//父类
public class Father{
//父类有一个打孩子方法
public void hitChild(){
}
}
//子类1
public class Son1 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("为什么打我?");
}
}
//子类2
public class Son2 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("我知道错了。");
}
}
//测试类
public class Test{
public static void main(String args[]){ Father father;
father = new Son1();
father.hitChild();
father = new Son2();
father.hitChild();
调用了相同的方法,出现了不同的结果!
子类可以直接向上转型,调用父类的方法,不会出现错误。但是在父类调用子类的方法时,必须是掉用之前转为父类的方法。不然会报错。我们在编程的可能会不知道是那一个。这时候可以用关键字instanceof来判定
抽象
抽象方法定义在抽象类或接口中,它只有方法的声明没有实现例如;
相同的行为,不同的实现 同样类型的变量,调用同样的方法,却产生不同的行为。
要理解多态性,首先要知道什么是“向上转型”和“动态绑定“。
向上转型:比如一个父类父类Animal和一个子类cat,我们可以说这只猫是动物,但是不能说动物就是只猫。因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的。
动态绑定:在运行时根据具体对象的类型进行绑定。若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。
java当中的向上转型或者说多态是借助于动态绑定实现的,所以理解了动态绑定,也就搞定了向上转型和多态。
例
//父类
public class Father{
//父类有一个打孩子方法
public void hitChild(){
}
}
//子类1
public class Son1 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("为什么打我?");
}
}
//子类2
public class Son2 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("我知道错了。");
}
}
//测试类
public class Test{
public static void main(String args[]){ Father father;
father = new Son1();
father.hitChild();
father = new Son2();
father.hitChild();
调用了相同的方法,出现了不同的结果!
子类可以直接向上转型,调用父类的方法,不会出现错误。但是在父类调用子类的方法时,必须是掉用之前转为父类的方法。不然会报错。我们在编程的可能会不知道是那一个。这时候可以用关键字instanceof来判定
抽象
java是面向对象的编程,而现实中有很多对象,都是具体的,要一一写具体类来描述它们很麻烦,所以把它们抽象出来,做抽象类。具体的就是你自己去通过继承一个抽象类来描述具体类。 使程序设计方便,更合理,能更好的规范子类 比如: 老师指着一个杯子说,小张你去帮我把那个东向拿过来。然后小张说,老师,你叫我拿那个杯子吗? 在这句话里那个东西就是父类,杯子就是子类,我们可以不去定义父类的属性,由子类把需要的属性写出来
抽象方法定义在抽象类或接口中,它只有方法的声明没有实现例如;
public abstract class AAA{ public abstract void test(); } 上面的test方法就是抽象方法,他后面直接写一个;号不能带{} 当一个类名中有一个方法定义为抽象方法,那么这个类必须定义为抽象类 关键字(abstract)。 抽象类不能产生对象(不能new出来) 因为没有属性 抽象类只能由子类访问其构造方法 如果父类是抽象类,那么任何子类必须重写抽象方法,除非子类也是抽象的。
相关文章推荐
- 面向对象特性,包括继承、封装、多态、抽象、访问控制
- java 面对对象(抽象 继承 接口 多态)
- 面对对象4【抽象abstract】【接口interface】【多态】【instanceof关键字】【Object类】
- 面向对象之多态,抽象,接口.
- Java面向对象-(封装,继承,多态复习)+抽象
- C++之面向对象程序设计的基本特点(抽象、封装、继承、多态)
- Java面向对象、抽象、封装、继承、多态
- 面对对象之封装继承多态(抽象)
- 黑马程序员 04 面向对象_继承_抽象_多态
- 2.0 面向对象 类与实例(关键字)、封装、继承、多态(虚方法,抽象类,抽象方法,接口)
- 面向对象之抽象、接口、多态
- 面相对象的抽象、封装、继承、多态的理解
- C/C++指针,多态,函数参数,面向对象抽象
- 多态抽象接口----面相对象
- 面向对象特性——多态和抽象
- 向对象的的基本特征:抽象,封装,继承,多态
- 黑马程序员-JAVA面向对象之抽象、接口、多态
- java--类与对象、构造方法、this、类变量(静态)、类方法、抽象、封装、继承、多态的回顾
- 对象的四大特征(下)--抽象和多态
- 浅谈java 面对对象(抽象 继承 接口 多态)