Java 面向对象:多态的理解
一、多态的定义
一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类)
-
操作符的多态
+可以作为算数运算,也可以作为字符串连接 -
类的多态
父类引用指向子类对象 -
注意:多态是方法的多态,属性没有多态性
二、多态的条件
- 有继承关系,extends关键字
public class Student extends Person{
/*方法体*/
}
- 子类重写父类的方法
public class Student extends Person{
@Override
public void run() {
System.out.println("Student");
}
}
- 父类引用指向子类对象
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
Person s2 = new Student();
s1.run();
s2.run();
}
}
- 输出
三、类多态的现象
1. 操作符的多态
- 如果+号两侧都是整型,那么+代表 数字相加
- 如果+号两侧,任意一个是字符串,那么+代表字符串连接
package charactor;
public class Hero {
public String name;
protected float hp;
public static void main(String[] args) {
int i = 5;
int j = 6;
int k = i+j; //如果+号两侧都是整型,那么+代表 数字相加
System.out.println(k);
int a = 5;
String b = "5";
String c = a+b; //如果+号两侧,任意一个是字符串,那么+代表字符串连接
System.out.println(c);
}
}
2.多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态
- 父类MiPhone,同一个类型,调用同一个方法,可以呈现不同的状态
package Day0203.Demo01;
public class MiPhone {
public void soc() {
System.out.println("小米手机处理器是骁龙处理器。");
}
public static void main(String[] args) {
MiPhone mi10 = new Mi10();
MiPhone mi10_870 = new Mi10_870();
mi10.soc();
mi10_870.soc();
}
}
- 子类Mi10,重写了父类的soc()方法
package Day0203.Demo01;
public class Mi10 extends MiPhone{
@Override
public void soc() {
System.out.println("小米10的处理器是骁龙865");
}
}
- 子类Mi10_870,重写了父类的soc()方法
package Day0203.Demo01;
public class Mi10_870 extends MiPhone{
@Override
public void soc() {
System.out.println("小米10新版的处理器为骁龙870");
}
}
四、使用多态的优缺点:
优点:
节省代码量,提高开发效率
缺点:
多态不能访问子类特有的功能