Java学习之多态
1. 背景知识
Java是面向对象的语言,在Java中一切都是对象。Java具有OOP语言所具有的一切特性:封装、继承和多态。
多态是面向对象程序设计中一个非常重要的特性,理解了多态后能够很好地进行面向对象的分析与设计。
2. 发生条件
- 继承,多态一定要发生在继承之后,在子类与父类之间。
- 重载@Override,子类在继承父类之后要对其方法进行覆盖。
- 在声明时声明的变量类型是父类类型,但是实例要指向子类实例。
如:Father father=new Child();
2. 代码示例
- 父类People
package polymorphism;
public class People {
String name;
int age;
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "People [name="+name+",age="+age+"]";
}
}
- 子类Student
package polymorphism;
public class Student extends People {
String school;
public Student(String name, int age, String school) {
super(name, age);
this.school = school;
}
@Override
public String toString() {
return "Student [school="+school+",name="+name+",age="+age+"]";
}
}
- 子类Worker
package polymorphism;
public class Worker extends People{
String factory;
public Worker(String name, int age, String factory) {
super(name, age);
this.factory = factory;
}
@Override
public String toString() {
return "Woeker [factory="+factory+",name="+name+",age="+age+"]";
}
}
- 实现
package polymorphism;
public class Polymorphism {
public static void main(String[] args) {
//发生多态
People p1=new Student("小张", 21, "南京大学");
People p2=new Worker("小王", 22, "BYD");
People p3=new People("小红", 21);
Student p4=new Student("小张", 21, "南京大学");
Worker p5=new Worker("小王", 22, "BYD");
People[] p= {p1,p2,p3,p4,p5};
int numOfStudent=0;
int numOfWorker=0;
for(People people:p) {
if(people instanceof Student) {
numOfStudent++;
}else if(people instanceof Worker) {
numOfWorker++;
}
}
System.out.printf("工人人数:%d,学生人数:%d",numOfWorker,numOfStudent);
}
}