欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java面向对象--多态

程序员文章站 2022-05-25 20:42:03
...

多态:

java面向对象--多态

1. 概念

多态是同一个行为具有多个不同表现形式或形态的能力。

举例:			Cat c=new Cat();
				Animal a=new Cat();
	猫可以是猫的类型。猫 m = new 猫();
	同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();
public class MyTest {
    public static void main(String[] args) {
    Animal an = new Dog();
        an.eat();
        an=new Cat();
        an.eat();
    }
}

class Animal{
    public void eat(){
        System.out.println("吃饭");
    }
}
class Cat extends Animal{
    public void eat() {
        System.out.println("吃小鱼干");
    }
}
class Dog extends Animal{
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

2.多态的前提

  1. 多态的前提:要有继承,如果没有继承,那多态也无从谈起
  2. 多态要有方法重写,当然不重写,语法上来说,不报错,但是多态的存在就没有意义
  3. 父类引用指向子类对象:父 f = new 子();

3.多态成员访问特点

a:成员变量
	编译看左边,运行看左边。
b:构造方法
	创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。
c:成员方法
	编译看左边,运行看右边。
d:静态方法
	编译看左边,运行看左边。
	(静态和类相关,算不上重写,所以,访问还是左边的)
public class MyTest {
    public static void main(String[] args) {
     // Zi zi = new Zi();
        //  System.out.println(zi.num);
        //  zi.fuShow();
        //多态的形式访问成员变量的特点
        //多态的形式访问成员变量:编译看左边,运行看左边
        Fu fu = new Zi();
        System.out.println(fu.num);
        //多态的形式访问成员方法的特点:编译看左边,运行看右边 (子类重写了父类的方法)
        fu.fuShow();
        //静态方法:不参与重写
        fu.fuShow2();
        Fu.fuShow2();
        Zi.fuShow2();
    }
}
    class Fu {
    int num = 100;
    public void fuShow() {
        System.out.println("fu show");
    }
    public static void fuShow2() {
        System.out.println("fu 静态 show");
    }
}
class Zi extends Fu {
    int num = 200;
    public void fuShow() {
        System.out.println("zi show");
    }
    public static void fuShow2() {
        System.out.println("zi 静态 show");
    }
}

4.多态的好处

a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证) 

5.多态的弊端和改进

弊端:不能使用子类特有的功能
解决方法:把父类的引用强制转换为子类的引用。(向下转型)

public class MyTest {
    public static void main(String[] args) {
    Student student1 = (Student) person;//向下转型
        student1.playGame();    
    }
}

class Person {
    public void eat() {
        System.out.println("吃饭");
    }
}
class Student extends Person {
    public void eat() {
        System.out.println("学生爱吃米饭");
    }
    public void playGame() {
        System.out.println("学生爱玩游戏");
    }
}

今天的学习到这里就结束啦~
I figure life’s a gift,and i don’t intend on wasting it.
我觉得人生是礼物,我不想白白浪费
—《泰坦尼克号》

相关标签: java 多态