Java--多态1
·
分享一下我对多态的认识:
课上,老师为了让我们初步认识多态,举了一个很有意思的例子:
假如你是一个正在排队吃饭的小伙,这个时候来了一个莫名其妙的男的插了你的队,饿坏了的你雷霆暴怒,抓着他就往外拽,但这个时候来了一个165JK学姐插了你的队,你直接就把自己的位置让给了学姐,自己也不顾吃饭了,最后你跟学姐加上了微信,算了不幻想了
总之我觉得这个例子很有意思,一种行为,面对不同对象时有不同表现,这就是多态
一、重写
要想认识多态,就必须先认识什么是重写,重写就是在继承体系下,父类和子类有一个参数类型一样,方法名一样,并且子类重写的这个方法访问权限不能比父类更严格的情况下,构成了重写
(访问权限宽松程度public>protected>default>private)
public class Dog extends Animal{
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
public class Animal {
public String name;
public void eat(){
System.out.println(this.name+"正在吃饭");
}
}
这种情况下我们就说eat方法重写了
二、向上转型
这也是认识多态的前提,向上转型就是将子类对象赋值给父类类型的引用变量的操作,来个实例:
Animal animal = new Dog();
这样我们就完成了向上转型
三、认识多态
在了解了重写和向上转型这两个概念之后,我们就可以初步认识什么是多态了
这有一个非常好的例子:
public class Animal {
public String name;
public void eat(){
System.out.println(this.name+"正在吃饭");
}
}
public class Dog extends Animal{
public void eat(){
System.out.println(this.name+"正在吃狗粮");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.name="旺财";
animal.eat();
}
}
在父类和子类中有eat这个重写方法,在main方法里我们通过向上转型创建了animal这个对象
那么我们是通过这个父类Animal类型的引用animal调用eat方法是调用父类的还是子类的呢?
我们发现打印结果为“旺财正在吃狗粮”,也就是说我们通过父类类型的引用调用到了子类的eat方法,这些现象也叫做动态绑定,也符合多态:一种行为,多种表现
四、静态绑定
不同于动态绑定的不确定调用哪个方法,静态绑多从一开始,用户给的参数数量或类型就已经确定了调用重载方法中的哪个
public class Test {
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
public static void main(String[] args) {
int ret1 = add(1,2);
int ret2 = add(1,2,3);
}
}
用户如果给出了三个数值,则明确调用三个参数类型的add,这就是静态绑定
更多推荐




所有评论(0)