1.多态概述
- 同一对象,在不同时刻表现出来的不同形态。
-
多态的前提
- 1.要有继承或实现关系
- 2.要有方法的重写
- 3.要有父类引用指向子类对象
2.多态中的成员访问特点
- 成员访问特点
1、成员变量:编译看父类,运行看父类
2、成员方法:编译看父类,运行看子类
演示代码如下:
//父类
public class Folder {
double size = 18;
public void show() {
System.out.println("这里是Folder类的show方法");
}
}
//子类
public class File extends Folder {
double size = 27;
String name = "null";
public void show() {
System.out.println("这里是File类的show方法");
}
public void delete() {
System.out.println("这里是File类的delete方法");
}
}
//Test
public class Test {
public static void main(String[] args) {
Folder a = new File();
a.show();//调用到子类重写的方法
System.out.println(a.size);//调用到父类中的成员变量
// a.delete();//调用子类中独有的方法,编译错误,无法访问
// System.out.println(a.name);//调用子类中独有的变量,编译错误,无法访问
}
}
运行结果:
3.多态的好处和弊端
- 好处:提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
- 弊端:不能使用子类的特有成员
4.多态中的转型
- 向上转型:父类引用指向子类对象就是向上转型
- 向下转型:可以通过父类引用调用子类特有方法
格式:子类型 对象名 = (子类型)父类引用;
//父类
public class Folder {
double size = 18;
public void show() {
System.out.println("这里是Folder类的show方法");
}
}
//子类
public class File extends Folder {
double size = 27;
String name = "null";
public void show() {
System.out.println("这里是File类的show方法");
}
public void delete() {
System.out.println("这里是File类的delete方法");
}
}
public class Test {
//多态
public static void main(String[] args) {
// 向上转型
Folder folder = new File();
folder.show();
//folder.delete();
// 向下转型
File file = (File) folder;
file.show();
file.delete();
}
}