什么是多态?
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
多态的实现原理
有2种方式来实现多态,一种是静多态即编译时多态,由编译时期决定,另外一种是动多态即运行时多态,是说运行时期才知道调用哪种方法。
编译时多态是通过方法的重载来实现的,运行时多态是通过方法的重写来实现的。
多态的条件:继承、重写、向上转换
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类重写父类中的方法。父类的引用变量不仅可以指向父类的实例对象, 还可以指向子类的实例对象。
向上转换:在多态中需要将子类的引用赋给父类对象。
相关代码实现:
1)继承
//继承
class A{
public void show(){
show1();
}
public void show1(){
System.out.println("wo");
}
}
class B extends A{//B类继承A类
public void show1(){
System.out.println("zui");
}
public void test(){
}
}
class C extends B{//C类继承B类
public void show1(){
System.out.println("bang");
}
}
2)向上转换
主函数:
public static void main(String[] args) {
A a = new B();//向上转换,隐式转换
a.show();
}
super关键字的两种用法:
一是:调用父类构造方法
二是:调用父类的属性和一般方法
class Employee1{
private String name;
private double salary;
private double workAge;
public Employee1(){
}
public Employee1(String name, double salary, double workAge){
this.name = name;
this.salary = salary;
this.workAge = workAge;
}
public double countSalary(){
if(workAge >= 1){
return salary;
}else if(workAge > 0.6 && workAge < 1){
return salary * 0.9;
}else{
return salary * 0.8;
}
}
public static void staticTest(){
System.out.println("父类...");
}
}
class Manager1 extends Employee1{
private double bonous;//奖金
public Manager1(){
}
public Manager1(String name, double salary, double workAge, double bonous){
super(name, salary, workAge);
this.bonous = bonous;
}
public double countSalary(){
return super.countSalary()+this.bonous;
}
public static void staticTest(){
System.out.println("子类");
}
}
函数重写:
class Animal{
String name;
void eat(){}
}
class Cat extends Animal{
int legNum;
//重写父类的方法
@Override
void eat() {
super.eat();
}
}
底层图示如下