一、面向对象特征之三:多态性
1.理解多态性:可以理解为一个事物的多态性
2什么是多态性:.
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
例: Person p2=new Man();
3.多态的使用:当调用子父类同名同参数的方法时,实际上是子类重写父类的方法—虚拟方法调用。
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
4.总结:编译,看左边;运行,看右边。
5.多态性的使用的前提:
1⃣️类的继承关系;
2⃣️要有方法的重写;
package tttt;
public class Person{
String name;
int age;
public void eat(){
System.out.println("人可以吃饭");
}
public void walk(){
System.out.println("人可以走路");
}
}
public class Man extends Person{
boolean isSmoking;
public void earnMoney(){
System.out.println("会挣钱");
}
public void eat(){
System.out.println("多吃饭");
}
public void walk(){
System.out.println("多走路");
}
}
public class Woman extends Person{
boolean isBeauty;
public void goShopping(){
System.out.println("喜欢购物");
}
public void eat(){
System.out.println("少吃饭");
}
public void walk(){
System.out.println("走路");
}
}
public class PersonTest{
public static void main(String args[]){
Person p1=new Person();
p1.eat();
Man man=new Man();
man.eat();
man.age=30;
man.earnMoney();
System.out.println("#####################");
//对象的多态性:父类的引用指向子类的对象
Person p2=new Man();
//多态的使用:当调用子父类同名同参数的方法时,实际上是子类重写父类的方法---虚拟方法调用
p2.eat();
p2.walk();
}
}
二、多态性的使用举例一:
package aaaa;
public class AnimalTest{
public static void main(String[] args){
AnimalTest test=new AnimalTest();
test.func(new Dog());
test.func(new Cat());
}
public void func(Animal animal){
animal.eat();
animal.shout();
}
}
class Animal{
public void eat(){
System.out.println("动物会吃饭");
}
public void shout(){
System.out.println("动物会叫");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗会骨头");
}
public void shout(){
System.out.println("汪汪汪");
}
}
classn Cat entends Animal{
public void eat(){
System.out.println("猫会吃鱼");
}
public void shout(){
System.out.println("喵喵喵");
}
}
举例二:
class Order{
public void method(Object obj){
}
}
举例三:
class Driver{
public void doData(Connection conn){//conn=new MySQlConnection()
//规范的步骤去操作数据
// conn.method1();
// conn.method2();
// conn.method3();
}
}
三、多态性不适用于属性
1.对象的多态性只适用于方法,不适用于属性。
2.编译,看左边;运行,看右边。(只适用于方法)
3.属性是编译、运行都看左边。