Java多态

Java多态

<1>多态:

事物存在多种体现形式。

父类的引用指向了子类对象。

接口的引用指向了实现类的对象。

// 动物(Animal) 猫(Cat) 狗(Dog)
              // 创建一个Cat对象
              Cat cat = new Cat();
              // 创建一个Dog对象
              Dog dog = new Dog();
              Animal a1 = new Animal();
              Animal a2 = cat; //多态
              Animal a3 = dog;
<2>多态的好处

提高代码的扩展性,使用多态作为参数,可以提高参数传递的灵活性。

<3>多态的前提:

必须要有关系,继承或者实现。

要有重写或者实现抽象方法。

<4>不同的对象可以访问的成员

(1)父类 对象名=new 父类();

只能访问父类中的成员

(2)子类 对象名=new 子类();

可以访问从父类继承的成员,访问重写后的方法和子类自定义的成员

(3)父类 对象名=new 子类(); //多态

可以访问父类中的成员,和子类重写的方法。不能访问子类中特有的方法和属性

<5>类型转换:(不论是向上转型还是向下转型,转的都是子类对象)

(1)向上转型:隐式转型,将子类类型隐藏。就不能访问子类中特有的方法

示例如下:

Dog dog=new Dog();
// 把狗提升成动物类型
Animal a=dog;
// a 只能访问Animal中的成员和重写后的方法,不能访问Dog类中特有的方法
(2)向下转型:强制转型,目的就是为了访问子类中特有的方法

示例如下:

 //向下转型的目的就是为了a对象能够访问特有的方法
// 向下转型之前必须使用instanceof关键字判断,此对象是否属于转成的类型 
          Dog dog=new Dog();
          // 把狗提升成动物类型
          Animal a=dog;
              boolean flag=a instanceof Dog;
              if(flag){
                   Dog  hsq=(Dog)a;
                   System.out.println(hsq);	
              }else{
                     System.out.println("不能转换");
              }
              // 将 obj 向下转型为String对象
              Object obj=new String("abc");
              if(obj instanceof  String){
                     String s=(String)obj;
                     System.out.println(s);
              }














你可能感兴趣的:(java)