java基础--多态

一.什么是多态?

多态就是一个事物的多种状态。

多态的规则
1.类与类之间必须有关系(继承关系)
2.必须要有方法的重写(没有重写没有意义)
3.核心:父类的引用(指针)指向子类的对象(空间)

二.多态如何调用成员变量

父类只能访问子类空间中属于父类的那块空间
编译:查看父类中是否有这个属性 没有就编译错误
运行:访问是父类中 这个成员变量


三.多态如何调用成员方法

编译:看父类中是否有该方法,没有就报错,有就编译通过
运行:调用子类重写父类的方法


对应代码

public class Demo02 {
	public static void main(String[] args) {
		//多态的创建形式
		Father son = new Son();
		son.print();
		System.out.println(son.num);
		
		Son son2 = new Son();
		son2.print();
		System.out.println(son2.num);
	}
}
class Father{
	int num = 10;
	public void print() {
		System.out.println("我是父类的打印方法");
	}
}
class Son extends Father{
	int num = 20;
	public void print() {
		System.out.println("我是子类的打印方法");
	}
}

四.多态的优缺点

优点:1.减少代码量,提高工作效率,复用性强(其实就是改善了代码的可维护性)。
         2.(核心)提高方法的扩展性

弊端:当使用多态方式创建对象时,无法直接调用子类中特有的方法。

那么当使用多态方式创建对象时,如何调用子类中特有的方法呢?
使用多态方式创建对象时,我们对子类对象进行了向上转型,如果我们想用调用子类中特有的方法,首先,使用强制类型转换,将其再向下转型(打回原形),然后就可以使用这个对象调用它特有的方法。
代码展示

public class Demo03 {
	public static void main(String[] args) {
		//多态创建对象
		//提升骗子逼格
		//提升子类对象类型--向上转型
		Person p = new PianZi();
		p.speak();
		//如何调用子类的特有方法
		//把装成人的骗子打回原形
		//向下转型-- 强制类型转换
		PianZi pZ =(PianZi)p;
		//调用子类的特有方法
		pZ.hit();
	}
}
class Person{
	public void speak() {
		System.out.println("聊天");
	}
}
class PianZi extends Person{
	@Override
	public void speak() {
		System.out.println("洗脑");	
	}
	public void hit() {
		System.out.println("打人");
	}
}


猜你喜欢

转载自blog.csdn.net/hehanHH/article/details/80285580