Java基本知识——多态

1.多态性

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对代码的图解

代码的图解

2.instanceof运算符

2.1instanceof运算符的使用格式

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

2.2instanceof运算符的作用

Instanceof运算符用于判断前面的对象是否是后面的类、子类、实例,如果是,则会返回true,如果不是则会返回false。
在进行强制类型转换时,可以先用instanceof运算符判断一下是否可以进行类型转换。
具体代码使用看下一部分的代码。

3.引用变量的强制类型转换

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、付费专栏及课程。

余额充值