多态:一种代码重用的机制。
分类:运行时多态(重写)和编译时多态(重载)。
/*代码举例*/
/*代码说明:督导监督教师教学和学生上课听课等情况*/
public class Person{
private String name;
private int age;
private char gender;
public Person(){
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public String getAge(){
return age;
}
public void setGender(char gender){
this.gender=gender;
}
public char getGender(){
return gender;
}
public void print(){
System.out.println("我是"+name+",年龄是"+age+"岁,我的性别是"+gender);
}
}
/*教师类*/
public class Teacher extends Person{
private String majorField;
public void setMajorField(String majorField){
this.majorField=majorField;
}
public String getMajorField(){
return majorField;
}
public Teacher(){
majorField=".net";
}
public Teacher(int a,char g){
}
public void print(){
super.print();
System.out.println(",我的授课方向是"+majorField);
}
//调用父类方法并在后面加上自己特有的内容
}
/*Student类*/
public class Student extends Person{
private String grade;
public void setGrade(String grade){
this.grade=grade;
}
public String getGrade(){
return grade;
}
public void print(){//重写
super.print();
System.out.println(",目前我上"+grade);
}
}
public class Supervisor{
//监督教师的方法
public void supervise(Teacher t){
System.out.println("开始监督");
System.out.println("1.表达准确");
System.out.println("2.讲解思路清晰");
}
//监督学生的方法
public void supervise(Student s){
System.out.println("开始监督...");
System.out.println("1.不迟到,早退,旷课");
System.out.println("2.课堂认真学习");
}
}
/*测试类*/
public class Test{
public static void main(String[] args) {
Supervisor supervisor=new Supervisor();
supervisor.supervisor(new Student());
supervisor.supervisor(new Teacher());
//上面这两行代码怎么理解??
}
}
/*程序问题分析:
*1.学生和老师上课应该属于学生和老师的行为,不应该放在监督类中
*2.这个程序的扩展性不好,若要在督导类中添加新的人员,则需要增添新的类
*然后还要修改督导类。(要求:高内聚,低耦合)
*/
/*
*如何修改呢?
*1.learn方法放到person类中,并在teacher类和Person类中重写person类中上课方法
* public void learn(){
*
* }
*2.在督导类中修改监督方法supervise(),参数类型改为Person对象类型
*/
//代码修改如下
/*代码说明:督导监督教师教学和学生上课听课等情况*/
public class Person{
private String name;
private int age;
private char gender;
public Person(){
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public String getAge(){
return age;
}
public void setGender(char gender){
this.gender=gender;
}
public char getGender(){
return gender;
}
public void print(){
System.out.println("我是"+name+",年龄是"+age+"岁,我的性别是"+gender);
}
public void learn(){
//后来加的一个learn的空方法
}
}
/*教师类*/
public class Teacher extends Person{
private String majorField;
public void setMajorField(String majorField){
this.majorField=majorField;
}
public String getMajorField(){
return majorField;
}
public Teacher(){
//this.majorField="";
this.(".net");
//调用构造方法必须是第一句,它调用本类中其它的构造器
}
public Teacher(String majorField){
this.majorField=majorField;
//this调用自己的属性
}
public void print(){
//System.out.println("执行Teacher中的print方法");
super.print();
System.out.println(",我的授课方向是"+majorField);
//调用自己的某个方法
}
//调用父类方法并在后面加上自己特有的内容
//真正实现的learn方法
public void learn(){
System.out.println("1.表达准确");
System.out.println("2.讲解思路清晰");
}
}
/*Student类*/
public class Student extends Person{
private String grade;
public void setGrade(String grade){
this.grade=grade;
}
public String getGrade(){
return grade;
}
public void print(){
super.print();
System.out.println(",目前我上"+grade);
}
//真正实现的learn方法
public void learn(){
System.out.println("1.不迟到,不早退。");
System.out.println("2.课堂上认真听讲");
}
}
/*监督者类*/
public class Supervisor{
public void supervise(Person p){
System.out.println("开始监督...");
p.learn();
/*两个监督方法变成一个,以此降低类之间的耦合性,
实现“低耦合”的要求,利于后期修改和增加特殊的类*/
}
}
/*测试类*/
public class Test{
public static void main(String[] args) {
Supervisor supervisor=new Supervisor();
supervisor.supervisor(new Student());
supervisor.supervisor(new Teacher());
}
}
/*说明:
supervise(Person p)中,这个监督方法所带的Person对象,在测试
类中给的实际对象是Student和Teacher对象,在运行”p.learn();”
语句的时候,可以是是Student和Teacher对象,也可以说是Person的任何一个子类对象。这就是多态,也叫表现形式多态,p就有多种表现形态。
多态的产生条件:1.必须有继承 2.有方法重写 3.必须是父类声明,
实际是子类对象。
多态的作用特点:使得代码高效重用,也使得系统可扩展性强。
*/
来源:https://www.cnblogs.com/shijinglu2018/p/8306395.html