/*

* 多态:同样类型的变量,调用同样的方法,却产生完全不同的行为
*
* 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("男人快速的走路");
}

}

相关文章:

  • 2021-08-05
  • 2022-12-23
  • 2021-11-27
  • 2021-05-20
  • 2021-08-03
猜你喜欢
  • 2021-07-06
  • 2021-05-02
  • 2021-11-11
  • 2021-08-29
  • 2021-06-26
  • 2021-06-24
  • 2022-12-23
相关资源
相似解决方案