java基础-面向对象の多态

来源:互联网 发布:excel2007中编程例子 编辑:程序博客网 时间:2024/06/03 21:48

多态性指的是:一个事物的多种表性形态

方法的重载与重写也是一种表现

子类对象的多态性

 

前提:

类的继承

子类对父类方法的重写

程序运行时分为编译、运行

对于多态来说,编译时,看左边,将此引用变量理解为父类的类型

运行时,看右边,关注于真正的对象实体,子类的对象。那么执行的方法就是子类重写的

 

 

Person p1=new Man();(向上转型)

虚拟方法调用,通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法

P1.walk();

P1.walk();

Woman w =(Woman)p2;向下转型,使用强转符:()

注意:如果man转化成woman在运行的时候会报类型转化异常错,java.lang.ClassCastException

//instanceof

If (p1 instanceof Woman){

Woman w1=(Woman)p1;

W1.shopping();

}

If (p1 instanceof Man){

Man m1=(Man)p1;

m1.entertainment();

}

格式:对象a instanceofA:判断对象a是否是A的一个实例,是的话返回true;否则返回false

aA的实例,那么a也一定是A类的父类的实例

父类的引用指向子类对象

package newpackage;//多态import java.util.concurrent.atomic.AtomicLong;import javax.management.InstanceAlreadyExistsException;public class TestAnimal {public static void main(String[] args) {TestAnimal t=new TestAnimal();//func的参数可以是任意的animal()父类或者旗下子类//父类对象指向子类引用t.func(new Animal());t.func(new Cat());t.func(new Dog());}public void func(Animal a) {a.eat();a.jump();//进行多态的判断if(a instanceof Dog){((Dog) a).wangwang();}else if(a instanceof Cat) {((Cat) a).catchMouse();}}}class Animal{String name;int age;public void eat(){System.out.println("animals eat");}public void jump(){System.out.println("animalsjump");}}class Dog extends Animal{public void eat() {System.out.println("Dogs eat");}public void jump() {System.out.println("Dogs jump");}public void wangwang(){System.out.println("Dogs wangwang");}}class Cat extends Animal{public void eat() {System.out.println("Cats eat");}public void jump() {System.out.println("Cats jump");}public void catchMouse(){System.out.println("Cats catch mouses");}}

0 0
原创粉丝点击