Java的多态
一、什么是多态?
一种引用类型,多种表现形式。在满足一定的条件下,子类可以转换成父类,用父类的对象即可调出公有的方法,且方法的形式是子类中定义的。
二、多态的条件
Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
三、多态的好处:
这样我们可以进行更好的扩展、我们可以使用父类中的任何一个类,就像dog 变量我们可以使用Aimal中的任何一个子类的方法和属性
四、多态的两种表现方式:
重载:
重载是发生在一个类中的,方法名相同,但是方法的参数、方法的个数、以 及方法的顺序是可以不相同的
重写:
.重写是发生在不同类中的
.方法的名称、方法的参数列表、方法的返回类型相同都要相同
.子类的修饰符要大于父类的修饰符
.方法抛出的异常不一样,子类抛出的异常要不父类抛出的异常小
.子类在调用方法时则优先考虑子类中的方法
—父类:Person.java
import java.util.Scanner;
public class Person {
public int salary;
public int allSalary(){
return 0;
}
public static void main(String[] args) {
Person p = null;
for (int n = 0; n < 3; n++) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个1-3的数字:\n1 is Teacher\n2 is Scientis\n3 is Waiter");
int i = sc.nextInt();
//分别指向了不同的子类,输出的结果是不一样的
if (i == 1) {
p = new Teacher(5000);
System.out.println(p.allSalary());
} else if (i == 2) {
p = new Scientist(5000);
System.out.println(p.allSalary());
} else if (i == 3) {
p = new Waiter(5000);
System.out.println(p.allSalary());
} else {
System.out.println("?\n请输入1-3");
}
}
}
}
—子类:Scientist .java
public class Scientist extends Person{
public Scientist(int salary){
this.salary = salary;
}
public int allSalary(){
int aa = salary*12+36500;
System.out.print("五五开一年的工资:");
return aa;
}
}
Waiter.java
public class Waiter extends Person{
public Waiter(int salary){
this.salary = salary;
}
public int allSalary(){
int aa = salary*12;
System.out.print("服务员一年的工资:");
return aa;
}
}
Teacher .java
public class Teacher extends Person{
public Teacher(int salary){
this.salary = salary;
}
public int allSalary(){
int aa = salary*12+3650;
System.out.print("教师一年的工资:");
return aa;
}
}