JavaSe面向对象多态

多态性

1.多态性的理解:可以理解为一个事物的多种形态

2.什么是多态性:父类的引用指向子类的对象/子类的对象父类的引用

Person p = new Man(); Object obj = new Date()

3.多态的使用:虚拟方法调用

编译时,只能调用父类中声明的方法,执行时,实际执行的是子类重写父类的方法

4.多态的使用前提:(1)子类继承父类 (2)子类重写父类方法

5.多态性代码举例

class Person{
    String name;
    int age;
    
    public void eat(){
        System.out.println("人吃饭");
    }
    
    public void walk(){
        System.out.println("人走路");
    }

}

class Woman extends Person{
    public void eat(){
        System.out.println("女人少吃长胖");
    }    
    public void walk(){
        System.out.println("女人走路减肥");
    }
    public void goShopping(){
        System.out.println("女人喜欢购物");
    }

}


public class WomanTest{
    public static void main(String[] args){
        Person p1 = new Woman();
        p1.eat();
        p1.walk();
    }    
}

 注意多态只使用于方法

6.向上转型和向下转型
向上转型:多态
向下转型(为什么要向下转型):有了对象的多态性之后,内存中实际是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时,只能调用父类声明的属性和方法。子类特有的属性和方法不能调用。通过向下转型,可以调用子类特有的属性和方法

instance of关键字的使用:


为什么用向下转型要使用到instance of?
为了避免在向下转型时出现ClassCastException异常,我们在进行向下转型之前,先进行 * instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。

a instanceof A:判断对象a是否是类A的实例。如果,返回true,如果不是,返回false;

if(p1 instance of Woman){
    Woman w1 = (Woman)p1;
    p1.goShopping();  //向下转型为Woman类型可以调用Woman的特有方法
    }

7.关于多态的面试题:
7.1 谈谈你对多态性的理解?
① 实现代码的通用性。
② Object类中定义的public boolean equals(Object obj){  }
  JDBC:使用java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、SQL Server)
③ 抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)

7.2多态是编译时行为还是运行时行为?

你可能感兴趣的:(java,java,开发语言)