多态性的使用及注意事项

一、面向对象特征之三:多态性
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.属性是编译、运行都看左边。

发布了30 篇原创文章 · 获赞 0 · 访问量 81

猜你喜欢

转载自blog.csdn.net/qq_45370866/article/details/105476122