您的位置 首页 java

java中多态的使用

什么是 多态

java 三大特性封装、继承、多态,那么到底什么是多态呢?

多态:是指”父类”类型的变量存储了子类对象的引用

注意:”多态”的使用,一定要有”继承关系”。

多态的前提和体现

  1. 有继承关系
  2. 有方法的重写
  3. 有父类的引用指向了子类的对象

class Person

{

}

class Student extends Person

{

}

class Teacher

{

}

class Employee extends Person

{

}

class Demo

{

public static void main(String[] args)

{

//之前的方式

Student stu = new Student();//OK的

Teacher tea = new Teacher();//OK的

// Student stu2 = new Teacher();//不可以;

//多态的方式:”父类”类型的变量存储了子类对象的引用

Person p1 = new Person();//宽类型:long

Student stu1 = new Student();//窄类型:int

p1 = stu1;//OK的

// Person p2 = new Teacher();//编译错误:Teacher跟Person没有关系

Person p2 = new Student();//OK的

Person p3 = new Employee();//OK的

}

}

多态成员的访问特点

1.成员变量:编译看左边(父类必须要有,否则编译错误),运行看左边(运行时,打印的值:父类的)

2.成员方法:编译看左边(父类必须要有,否则编译错误),运行看右边(运行时,运行的是”子类”的)

(方法的执行:动态绑定的)

3. 静态方法 :编译看左边(父类必须要有,否则编译错误),运行看左边(运行时,运行的是”父类”的)

总之:编译都要看左边,也就是:多态时,访问的成员,父类中必须要有;否则编译错误;

运行时:除”成员方法”看右边,其它都是看左边;

class Animal

{

int num = 10;

void show(){

System.out.println(“Animal –> show()”);

}

//静态方法

static void fun(){

System.out.println(“Animal –> fun()”);

}

}

class Cat extends Animal

{

int num = 20;

void show(){

// super.show();

System.out.println(“Cat –> show()”);

}

//重写父类的静态方法

static void fun(){

System.out.println(“Cat –> fun()”);

}

}

class Demo

{

public static void main(String[] args)

{

//正常的情况

Cat c = new Cat();

System.out.println(“c.num = ” + c.num);//子类的

//多态的形式

Animal a1 = new Cat();

//成员变量:编译看左边,运行看左边

System.out.println(“a1.num = ” + a1.num);//对于成员变量:父类的

//成员方法:编译看左边,运行看右边

a1.show();//子类的;

//静态方法:编译看左边,运行看左边

a1.fun();//父类的

}

}

多态中类型转换

1.多态时:Animal a1 = new Cat();

此时,编译器是将Cat的引用”隐式”的转换为Animal类型。

这种转换类似于long n = int;是一种隐式的:类型提升–>向上转型;

2.多态时,父类的引用不能访问子类特有的成员;

3.可以将”父类类型”强制转换为”它所存储的子类对象”的引用;

Cat c = (Cat)a1;

向下转型后,就可以访问子类特有成员;

4.强制转换时,一定要转换为”它所存储的子类对象”,否则会在运行时抛出:ClassCastException

为了防止这种异常,我们可以在”强制转换前”先进行判断,后转换:

判断,使用关键字: instanceof (只能用于引用数据类型的判断)

格式:变量 instanceof 某类类型

返回: boolean 值;如果为true:表示左边的”变量”是右边的”某类类型”,可以安全强制转换

如果为flase:表示左边的”变量”不是右边的”某类类型”;

文章来源:智云一二三科技

文章标题:java中多态的使用

文章地址:https://www.zhihuclub.com/185189.shtml

关于作者: 智云科技

热门文章

网站地图