Java教程

Java的多态

本文主要是介绍Java的多态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java的多态

1. 对象的多态性
对象多态性前提:
必须有继承或者有接口的实现
必须有方法的重写

多态的语法规则:
父类或者接口的引用指向自己的子类的对象

// 多态的写法
父类(或接口) 变量名(对象名) = new 子类对象();

当对象调用方法时,执行的是子类重写的方法
多态中成员的特点:
多态中成员变的特点:
编译时:若父类中没有该成员变量,编译失败
运行时:如果父类和子类中有同名的成员变量时,会运行父类中的成员变量,而不运行子类中的成员变量
多态中成员方法的特点:
编译时:若父类中没有该成员方法,编译失败
运行时:运行子类重写的方法
总结:成员方法编译看左边,运行看右边;成员变量都是看左边
Person p = new Student();

// 父类:person
public class Person {
   String s = "父类成员";

   public void eat(){
       System.out.println("人在吃饭");
   }
}
// 子类:Student
public class Student extends Person {
    String s = "子类成员";

    public void eat(){
        System.out.println("学生吃饭");
    }
}
// main方法
public static void main(String[] args) {
        Person p = new Student();
        //对象p,子类对象,调用成员变量s
        System.out.println(p.s);
        //子类对象调用方法
        p.eat();
    }

多态的转型
多态的程序中,不能调用子类的特有成员
只能调用子类和父类的共有成员

转后类型 变量名 = (转后类型) 要转的数据

 public static void main(String[] args) {
     //创建对象,多态性
     //父类 = new 任意子类对象() 扩展
     Animal animal = new Cat();
     animal.eat();
     //Cat类的特有功能 catchMouse()方法
     //类型转换,强制
     //Cat提升为了Animal,转回Cat类型
     Cat c = (Cat)animal;
     c.catchMouse();

多态性可以提升扩展性,是否需要强制转换,根据实际功能需求来决定
多态中的转型异常
异常ClassCastException 类型转换异常,在多态中经常发生.
是在进行类型的强制转换的时候发生,我们现在的案例是Dog不能转成Cat.
需要解决这个异常 : 对象是Cat转Cat,是Dog换Dog

运算符 : 比较运算符,结果是boolean类型

运算符是关键字 instanceof

instanceof的语法格式:是在进行类型的强制转换的时候发生,我们现在的案例是Dog不能转成Cat.

需要解决这个异常 : 对象是Cat转Cat,是Dog换Dog

运算符 : 比较运算符,结果是boolean类型

运算符是关键字 instanceof

instanceof的语法格式:

对象名 instanceof  类的名字
解析: 比较这个对象,是不是由这个类产生的
c instanceof Cat  解释: c对象是不是Cat类产生的,如果是结果就是true

强制类型转换之前的安全性判断

public static void main(String[] args) {
    //多态创建对象
    Animal animal = new Dog();
    animal.eat();
    //判断 animal是不是Cat类的对象
    //boolean b = animal instanceof Dog ;
    //System.out.println(b);
    //调用子类的特有方法
    if (animal instanceof Cat){
        //if为true,强制转换为Cat
        Cat c = (Cat)animal;
        c.catchMouse();
    }
    if (animal instanceof Dog){
        Dog d = (Dog)animal;
        d.lookHome();
    }
}
这篇关于Java的多态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!