Java学习:多态
程序员文章站
2024-03-21 19:20:16
...
多态:就是指一种事物,在不同时刻,所表现出来的不同状态。
在我们编写程序时,经常会发现一个父类的许多子类继承了父类的功能,但不同的子类所体现出的功能却不尽相同,例如经典的猫狗案例。
多态的前提:
1.要有继承
2.要有方法重写,不重写也可以,但是就失去了多态的意义
3.父类引用指向子类对象
我们可以通过一个程序来做以了解
public class Animal {
public String name;
public int age;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫白天睡觉");
}
public void catchmouse(){
System.out.println("抓老鼠");
}
}
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
@Override
public void sleep() {
System.out.println("狗晚上睡觉");
}
public void lookdoor(){
System.out.println("狗看门");
}
}
public class Function {
public static void show(Animal an){
System.out.println(an.name+" "+an.age);
an.eat();
an.sleep();
}
}
public class Test {
public static void main(String[] args) {
Animal an = new Cat();
an.name="汤姆";
an.age=3;
Function.show(an);
((Cat) an).catchmouse();
System.out.println("---------------------------------------");
an=new Dog();
an.name="旺财";
an.age=4;
Function.show(an);
((Dog) an).lookdoor();
}
}
汤姆 3
猫吃鱼
猫白天睡觉
抓老鼠
---------------------------------------
旺财 4
狗吃肉
狗晚上睡觉
狗看门
在这个程序中我们可以看到,Cat类和Dog类都有自己的特有方法,而对象的引用却是Animal,父类肯定不能直接调用子类的特有功能,这也是多态的弊端所在,如果要调用这两个方法,就必须按照程序所示,进行向下转型。
多态的成员访问特点:
多态形式去访问成员变量:编译看左边,运行也看左边
多态形式去访问成员方法:编译看左边,运行看右边
多态形式去访问静态方法:编译看左边,运行也看左边
多态形式的构造方法:创建子类对象,同样会先访问父类的构造方法
私有化构造,外界不能借助构造方法来创建对象