Java语言之多态思想

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("子类类的静态方法");
    }
}

运行结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/changjinfeng123/article/details/89375424