java 多态_Java基本知识——多态

本文详细介绍了Java中的多态性概念,包括编译时类型与运行时类型的区别,并通过代码示例展示了多态如何在实际编程中体现。代码演示了如何通过父类引用调用子类的方法,以及`instanceof`运算符的使用,强调了方法的多态性和实例变量的非多态性。此外,还讲解了强制类型转换的必要性和操作方式。

多态性

1.1多态的概念

多态——面向对象的三大特征之一;在java中引用变量有两个类型,一个是编译时类型,另一个是运行时类型。编译时类型由声明该变量时使用的类型所决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,那就会出现多态。

建议大家看完概念后,再去看看代码,然后再回来读一遍概念,会有更深层的体会的。

1.2多态的代码讲解

请大家结合注释认真看代码、写代码,代码如下:

//父类

class Father{

public int age = 40;

public void remember(){

System.out.println("父类Father的remember方法");

}

public void work() {

System.out.println("父类Father独有的work方法");

}

}

//子类

public class Son extends Father {

public String age = "20";

//重写父类的remember方法

public void remember() {

System.out.println("子类Son重写的remember方法");

}

//子类独有的方法

public void study() {

System.out.println("子类Son独有的study方法");

}

public static void main(String[] args) {

//编译类型与运行类型一致

Father father = new Father();

//访问父类的变量age并输出

System.out.println(father.age);

//调用父类的方法remember

father.remember();

//运行父类的独有work方法

father.work();

//编译类型与运行类型一致

Son son = new Son();

//访问子类的age变量

System.out.println(son.age);

//运行子类重写后的remember方法

son.remember();

//运行子类独有的study方法

son.study();

//多态产生,编译类型是Father类,但是实际的运行类型却是Son类

Father polymorphism = new Son();

//实例变量并没有多态性,输出父类的age的值

System.out.println(polymorphism.age);

//方法具有多态性,执行运行类型Son的重写后的remember方法

polymorphism.remember();

//运行编译类型Father独有的work方法,但子类独有的study方法却无法调用,因为编译类型中没有该方法

polymorphism.work();

}

}

运行结果如下:

40

父类Father的remember方法

父类Father独有的work方法

20

子类Son重写的remember方法

子类Son独有的study方法

40

子类Son重写的remember方法

父类Father独有的work方法

1.3对代码的图解

70aec4afa25b7e5d0fb6e980619e81c5.png

instanceof运算符

2.1instanceof运算符的使用格式

一个引用类型变量 instanceof 一个类(或接口)

2.2instanceof运算符的作用

Instanceof运算符用于判断前面的对象是否是后面的类、子类、实例,如果是,则会返回true,如果不是则会返回false。

在进行强制类型转换时,可以先用instanceof运算符判断一下是否可以进行类型转换。

具体代码使用看下一部分的代码。

引用变量的强制类型转换

3.1强制类型转换概念

因为引用变量只能调用他编译时类型的方法,而不能调用其运行时类型的方法;所以,如果需要让这个引用变量调用他运行时类型的方法时,必须进行类型转换。

在使用instanceof运算符确定可以进行类型转换后,使用这种格式:(转换后的类型)变量;就可以进行类型转换。

3.2代码示例

代码如下:

public class Son{

public static void main(String[] args) {

//double类型的变量num

double num = 2.23;

//数值之间的强制类型转换,转换为int

int change = (int)num;

//输出2.23

System.out.println("double类型的变量:" + num);

//输出2

System.out.println("进行类型转换后的int类型:" + change);

Object object = "Object类型变量";

//object类型是所有类型的父类,可以进行String类型的转换,输出true

System.out.println(object instanceof String);

String str = (String)object;

System.out.println(str);

}

}

运行结果如下:

double类型的变量:2.23

进行类型转换后的int类型:2

true

Object类型变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值