您的位置:首页 > 编程语言 > Java开发

java基础-面向对象の多态

2016-05-04 15:46 507 查看
多态性指的是:一个事物的多种表性形态

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

子类对象的多态性

 
前提:

类的继承

子类对父类方法的重写
程序运行时分为编译、运行

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

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

 

 
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 instanceof
类A:判断对象a是否是A的一个实例,是的话返回true;否则返回false
若a是A的实例,那么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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息