/*
* 多态:同样类型的变量,调用同样的方法,却产生完全不同的行为
*
* 1.当父类类型的变量指向一个子类的对象,调用父类中已经被重写的方法的时候
* 2.在多态的情况下(当父类类型的变量指向一个子类的对象 ); 不能调用子类添加的方法
* 3.在多态的情况下,可以对对象进行强制的转换。这样就可以调用子类添加的方法了
*
* 正常的调用
* Person p1 =new Person();
p1.walk(); walk调用的是Person类的Walk方法
虚拟的调用
* Person p2= new Man();
p2.walk(); walk调用 的是 Man类的Walk方法
//p2.work(); 这样不能写。因为不能调用子类添加的方法
*
* //对象转换
Man man = (Man)p2;
man.work();
3.1 父类的对象可以转为任何子类的类型,但可能会发生 Java.lang.ClassCastException
3.2 只有再有父子关系 的情况 下,才能进行强制类型转换
*
*/
public class TestPerson {
public void Test(Person person){
System.out.println(person instanceof Person);
System.out.println(person instanceof Man);
System.out.println(person instanceof Woman);
}
public static void main(String[] args) {
Person p1 =new Person();
p1.walk();
// Man man = new Man();
// man.work();
// man.walk();
//
//P2 P2就是人的一种多态,它具备人的特性。
//只需要用Man去转换,也能具备人的特性
Person p2= new Man();
p2.walk();
//对象转换
Man man = (Man)p2;
man.work();
Person p3 =new Woman();
p3.walk();
TestPerson testperson= new TestPerson();
testperson.Test(p1);
System.out.println();
testperson.Test(p2);
System.out.println();
testperson.Test(p3);
}
}
-----------Person 类---------------
public class Person {
String name;
int age;
public String getInfo(){
return "name"+name + ",age :"+ age;
}
public void walk(){
System.out.println("人在走路");
}
public Person(){
}
public Person(String name, int age){
super();
this.name =name;
this.age = age;
}
}
-----Woman类-------------
public class Woman extends Person{
void shopping(){
System.out.println("女人逛街");
}
@Override
public void walk() {
System.out.println("女人优雅的走路");
// TODO Auto-generated method stub
//super.walk();
}
}
----------Man类--------------
public class Man extends Person {
}
@Override
public void walk() {
super.walk();
System.out.println("男人快速的走路");
}
}