Java的多态
创建Person类
package 多态;
public class Person {
String name;
int age;
int id=1001;
public void eat(){
System.out.println("人吃饭");
}
public void walk(){
System.out.println("人走路");
}
}
在同一个包中创建子类Man
package 多态;
public class Man extends Person{
Boolean ismaking;
int id=1002;
public void eat(){
System.out.println("男人多吃肉");
}
public void walk(){
System.out.println("男人走路霸气");
}
public void earnmony(){
System.out.println("男人负责挣钱养家");
}
}
在同一个包中创建main函数
package 多态;
/*
面向对象的三大特性之一:多态性
1、理解多态性:可以理解一个事务的多种形态
2、何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
3、多态的使用,虚拟方法调用
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期间,我们实际运行的是子类重写父类的方法
总结:编译看左边,运行看右边
4、多态性的使用前提:1.类的继承 2、方法的重写
5、对象的多态性,只适用于方法,不适用于属性(属性不能重写,在编译时就被定义了,属性编译和运行都看左边)
如何更好的理解多态就需要理解声明引用和创建对象的方法
Dog mydog=new Dog()
1.Dog mydog
声明了一个引用变量
要求java虚拟机分配空间给引用变量,并将此变量命名为mydog。此变量将永远的固定为Dog类型
2.new Dog()
创建对象
要求java虚拟机分配堆空间给新建立的Dog对象
*/
public class Persontest {
public static void main(String[] args) {
Person p1=new Person();
p1.eat();
Man m1=new Man();
m1.eat();
m1.age=25;
m1.earnmony();
System.out.println("-------------------------");
//对象的多态性:父类的引用指向子类的对象
Person p2=new Man();//编译看左,运行看右
//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法---虚拟方法调用
p2.eat();
p2.walk();
//下面的写法是错的
// p2.earnmony();
System.out.println(p2.id);//1001?1002?
}
}