是什么多态
多态是java的三大特性之一
从代码上来说 父类引用指向子类对象就是一种多态
例如 有两个类 person类和 student类 student类继承person类
person 类有 eat 方法和 sleep方法
student 类有study方法
此时
person stu = new student();
此时stu不能调用study方法,因为声明的类型是person类型,虽然实际指向的student对象中用study方法
但是在编译期,编译器认为stu是一个person对象,person类里没有study方法,编译不通过,自然无法运行,
所以stu 只能使用父类中已经声明的方法和属性
public class test {
public static void main(String[] args) {
person stu = new student();
stu.print();
stu.person();
System.out.println(stu.name);
student student = (student) stu;
stu.person();
student.student();
System.out.println(student.name);
}
}
class person{
String name = "per";
person(){
System.out.println("调用per无参构造器");
}
public void print(){
System.out.println("person的print方法");
}
public void person(){
System.out.println("person有而stu没有的方法");
}
}
class student extends person{
String name = "stu";
student(){
System.out.println("调用stu无参构造器");
};
public void print(){
System.out.println("student的print方法");
}
public void student(){
System.out.println("studnet有而person没有的方法");
}
}
输出
调用per无参构造器
调用stu无参构造器
student的print方法
person有而stu没有的方法
per
person有而stu没有的方法
studnet有而person没有的方法
stu
子类重写父类方法 调用的是子类方法
person stu = new Student()l
调用子类有而父类无的方法 编译报错
父类引用指向子类对象是一种动态绑定 ,
父类引用指向子类对象有什么作用?
增加代码的扩展性 我也不懂 百度的
重写和重载也是多态的一种体现
感觉可以理解为一个类或者一个对象的多种心态?
我是一个animal
要飞我就变成鸟形态
要游水就变成鱼形态
要吃饭就变成饭桶形态