JAVA 面向对象之------多态

什么是面向对象?

面向对象(Object Oriented Programmng)是以对象为中心。面向对象是把一项工程看成是一个个对象组成,
这些对象之间的相互关系,构成了整个项目。其中,类和对象是构成面向对象的程序的主体。面向对象的思想特点在于,它是一种更符合我们思想习惯的思想,可以将复杂的事情简化,将我们从执行者变为了指挥官,角色发生了转变。面向对象的开发工作就在于不断的创建对象、使用对象、指挥对象去做事情。
面向对象的三大特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)

多态的定义

所谓多态,即多种形态、状态。例如:动物中有小猫、小狗、猴子、大象等,其中小猫、小狗、猴子、大象都是动物的一种,但是它们之间有着不一样的特点,这就是动物的一种多态。
多态的实现是有条件的:java多态的必要条件必须实现继承、重写。
多态的实现基础:父类声明的变量可以引用所有子类的对象。只有在运行的时候才会知道引用变量所指的具体实例对象。

多态的作用

把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,作出通用的编程,以适应需求的不断变化。简单的说,就是用父类或者接口的引用变量指向子类的对象。

//父类
public class Animal {
public void shout() {
System.out.printIn("动物在嚎叫");
    }
}
//子类
public class Dog extends Animal{
override
public void shout(){
System.out.printIn("wang wang wang");
}
public void eatBone(){
System.out.printIn("Dog eat bone");
     }
}
//测试类
public class Test {
public static void main(String[] args) {
Animal animal1=new Animal();
animal1.shout();
System.out.println("--
-----");
Dog dog1=new Dog();
dog1.shout();
dog1.eatBone();
System.out.println("-------");

//父类引用指向子类对象
Animal animal2=new Dog();
//wang wang wang
animal2.shout();
//Error code
//animal2.eatBone();
//父类对象强转为子类对象
Dog dog2=(Dog)animal2;
dog2.shout();
Animal animal1=new Animal();
animal1.shout();
dog2.eatBone();
System.out.printIn("---------");
//Exception in thread "main" java.lang.ClassCastException
//Error codes
//Animal animal3=new Animal();
//Dog dog3=(Dog)animal3;
}
}
//类型转换的重点:
//1、弄清楚继承关系、谁是父类谁是子类
//2、关键点在于创建对象时调用的是谁的构造函数
多态的实现
  • 基于继承多态的实现
    多个子类对同一父类方法的重写,可以在运行时表现出不同的行为。
  • 基于接口实现的多态
    一个接口可以有多个实现类。所以,多个实现类对接口中同一种方法的重写,可以在运行时表现出不同的行为。
  • 函数参数的多态
    多态可以作为形参,接受范围更广的对象,接收的参数更加灵活。
  • 函数返回值的多态
    多态可以作为返回值,接收范围更广的对象。
public void 父类  方法名(){
     return 父类对象;
     return 子类对象;
}
  • 注意:
    当父类引用指向子类对象时:成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边!!!