Java语言之多态思想
一、多态的概念
1、多态的思想
多态就是某一个事物,在不同时刻表现出来的不同状态。多态的前提:类与类之间有继承关系;子类需要重写父类的方法,但方法不重写也可以,只是如果这样的话使用多态的思想就没有太大的意义;有父类引用指向子类对象,这点便是多态最主要的思想。
2、多态代码的格式
父 f = new 子();
例如:
\\直接创建子类对象
Cat c=new Cat(); \\猫可以是猫的类型
利用多态创建子类对象
Animal a=new Cat(); \\猫也是动物的一种,也可以把猫称为动物
3、多态的优点
多态可以提高了代码的维护性,因为多态的前提是类与类之间有继承关系,而继承的好处之一就是提高了代码的维护性,所以这个是由继承保证的。还有多态提高了代码的扩展性,因为多态提倡的是子类要重写父类的方法,将其特有的功能也写上去,所以就会提高代码的扩展性。
4、多态的弊端
多态不能使用子类特有的功能,但如果我们想要访问子类特有的功能,我们应该把父类的引用强制转换为子类的引用,称为向下转型。
例如:
public class MyTest {
public static void main(String[] args) {
Fu fu = new Zi();
System.out.println(fu.a);
fu.show();
((Zi) fu).test(); //访问子类独有方法时的向下转型
Zi zi= (Zi) fu; //访问子类成员变量的向下转型
System.out.println("子类成员变量为:"+zi.num);
}
}
class Fu{
int a=10;
public void show(){
System.out.println("父类的show方法");
}
}
class Zi extends Fu{
int num=10;
@Override
public void show() {
System.out.println("子类重写了父类的show方法");
}
public void test(){
System.out.println("子类一个特有的方法");
}
}
运行结果为:
二、多态中对成员的访问特点
1、多态中的成员变量
编译看左边,运行看左边。也就是说,以多态的形式来访问成员变量,使用的还是父类的成员变量。
2、多态中的成员方法
编译看左边,运行看右边。也就是说,以多态的形式来访问公共的成员方法,使用的是子类重写了的的成员方法。
3、多态中的静态成员方法
编译看左边,运行看左边。因为静态和类相关,若子类与父类有一模一样的静态方法,也算不上重写,所以,访问还是左边的。
例如下面的例子:
public class MyTest {
public static void main(String[] args) {
Fu fu = new Zi();
System.out.println("父类的成员变量为:"+fu.num);// 多态中的成员变量:编译看左边,运行看左边
System.out.println("子类中的成员变量"+new Zi().num);
fu.show(); //多态中的成员方法:编译看左边,运行看右边
Fu.method(); //静态方法建议直接用类名去调用,因为静态方法在类加载进内存时已经存在
Zi.method(); //静态方法是随着类的存在而存在
}
}
class Fu{
int num = 100;
public void show(){
System.out.println("父类的show方法");
}
public static void method(){
System.out.println("父类的静态方法");
}
}
class Zi extends Fu{
int num=10;
@Override
public void show() {
System.out.println("子类重写过后的show方法");
}
public static void method() {
System.out.println("子类类的静态方法");
}
}
运行结果为: