码迷,mamicode.com
首页 > 编程语言 > 详细

Java面向对象笔记4

时间:2015-02-17 23:35:39      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:java   多态   面向对象   向上转型   向下转型   

封装、继承、多态是面向对象的三大特征,在Java中什么是多态?


Java引用变量有两种类型,分别是编译时类型和运行时类型。何为编译时类型,编译时类型就是由声明该变量时使用的类型决定,而运行时类型是由实际赋给该变量的对象决定


的,也就是说如果编译时类型和运行时类型不一致时,就可能出现上面提到的多态。


我们看下下面的程序:

class BaseClass {
	public String name = "BaseClass";

	public void base() {
		System.out.println("父类的方法");
	}

	public void test() {
		System.out.println("父类的方法,等会儿会被子类重写");
	}
}

public class Main extends BaseClass {
	public String name = "Main";

	public void test() {
		System.out.println("子类重写父类的方法");
	}

	public void main() {
		System.out.println("子类的方法");
	}

	public static void main(String[] args) {
		BaseClass mainClass = new Main();//1
		System.out.println(mainClass.name);//2
		mainClass.test();//3
	//	mainClass.main();//4(报错)
	}
}

上面定义一个父类BaseClass,子类Main继承了父类BaseClass,并在子类中重写了父类的方法test方法。

OK,先看下输出结果:

     BaseClass
    子类重写父类方法

从上面程序可以很快的看出在创建对象时,编译时类型(BaseClass)和运行时类型(Main)并不相同,在子类Main覆盖了父类的test方法时,调用该引用变量的test方法,实际


执行的是Main类中覆盖后的test方法,这时就出现了多态。子类是一种特殊的父类,因此Java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称


为向上转型,向上转型由系统自动完成。在上面的 mainClass引用变量的编译时类型是BaseClass,运行时类型是Main,当运行时调用该引用变量的方法时,其方法行为总是表


现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法是呈现出多种不同的行为特征,这就是多态。在上面代码4处,这行


代码会在编译时报错,这是因为它的编译时类型为BaseClass,因此无法调用main这个方法。


在编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,如果需要让这个引用变量调用它运行时类型的方法的话,可以用强制类型转换成


运行时类型。在进行强制类型转换时需要注意以下几种情况:


1、基本类型之间的转换只能在数值类型之间进行,这边的数值类型包括整型、字符型和浮点型。需要注意的是,数值类型和布尔类型之间不能进行类型转换。


2、引用类型之间的转换只能在具有继承关系的两个类型之间进行。


在进行类型转换之前,通常建议使用instanceof运算符来判断是否可以成功转换,来避免出现ClassCastException异常。instanceof用法如下

if(str instanceof  String){

String s=(String)str;

}

instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类也可以是接口。





转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43868569    情绪控_ 





Java面向对象笔记4

标签:java   多态   面向对象   向上转型   向下转型   

原文地址:http://blog.csdn.net/hai_qing_xu_kong/article/details/43868569

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!