18天Java学习---16.面向对象编程11-Java多态性,instanceof及Object类
2012-01-05 10:35
465 查看
多态是一个之前一直搞不清楚的概念,通过这次笔记,对多态的概念及应用有了较全面的认识,同时学习了instanceof关键字以及Object类的特点.
1. Java中类的多态
所谓类的多态性,是指子类对象和父类对象之间的相互转换. 这里分为两部分做笔记:
1.1 子类对象向父类对象转换(向上转换)
![](http://pic002.cnblogs.com/images/2010/131893/2010092014105960.jpg)
子类对象向父类对象的转换是自动转换.格式为: 父类对象 = 子类对象.
这里需要注意的一点事: 子类对象转换为父类对象后,所调用的方法一定会是子类复写后的方法而非父类原有方法.
例如下面的例子:
?
1.2 父类对象向子类对象转换(向下转换)
![](http://pic002.cnblogs.com/images/2010/131893/2010092014113823.jpg)
父类对象向子类对象的转换是强制转换. 格式为: 子类对象 = (子类名称) 父类对象
在父类对象向子类对象的转换的过程中,需要注意的是: 如果父类对象是实例化的父类对象而不是用子类对象转换过来的对象,则不能在强制转换为子类对象,否则会出现ClassCastException类转换异常. 也就是说,能进行父类对象向子类对象转换的前提是:
之前是使用子类对象的实例来初始化得父类对象. 例如下面例子中,是先使用实例化的子类对象转换为父类对象的.
?
结论:
在进行向下转换之前,两个对象必须先发生向上转换关系(如上面例子),否则无法转换(出现类转换异常).
2. instanceof关键字
instanceof用于判断某个对象是否是某个类的实例. 例如: a instanceof B 若a是B的实例,则返回true,否则返回的是false.
instanceof的使用时机:
例如下例,一般情况下, 都是在转型之前使用instanceof进行一下判断,这样可以进行比较安全的类型转换.
?
3. Object类
所有的类都继承自Object类,这是所有类的一个基类.
一个比较好的类,需要复写Object类中的三个方法.
|- public String toString()
|- public boolean equals(Object obj)
|- public int hashCode()
在下面的例子中,类Student复写了上面的toString()方法和equals()方法,而且使用到了instanceof关键字,算是一个小复习题目了~
?
以上16个小知识点我用了3天看完了,算是JAVA这个面向对象语言的基础吧,从基本的语法结构到类的三大特点:封装,继承,多态,还有一些细节性的知识点的简绍,如this,super,static,final,abstract, interface,object类等等。到此,对JAVA算是有了一个基本的了解了吧。下面链接下所有的链接:
1. Java中类的多态
所谓类的多态性,是指子类对象和父类对象之间的相互转换. 这里分为两部分做笔记:
1.1 子类对象向父类对象转换(向上转换)
![](http://pic002.cnblogs.com/images/2010/131893/2010092014105960.jpg)
子类对象向父类对象的转换是自动转换.格式为: 父类对象 = 子类对象.
这里需要注意的一点事: 子类对象转换为父类对象后,所调用的方法一定会是子类复写后的方法而非父类原有方法.
例如下面的例子:
?
![](http://pic002.cnblogs.com/images/2010/131893/2010092014113823.jpg)
父类对象向子类对象的转换是强制转换. 格式为: 子类对象 = (子类名称) 父类对象
在父类对象向子类对象的转换的过程中,需要注意的是: 如果父类对象是实例化的父类对象而不是用子类对象转换过来的对象,则不能在强制转换为子类对象,否则会出现ClassCastException类转换异常. 也就是说,能进行父类对象向子类对象转换的前提是:
之前是使用子类对象的实例来初始化得父类对象. 例如下面例子中,是先使用实例化的子类对象转换为父类对象的.
?
在进行向下转换之前,两个对象必须先发生向上转换关系(如上面例子),否则无法转换(出现类转换异常).
2. instanceof关键字
instanceof用于判断某个对象是否是某个类的实例. 例如: a instanceof B 若a是B的实例,则返回true,否则返回的是false.
instanceof的使用时机:
例如下例,一般情况下, 都是在转型之前使用instanceof进行一下判断,这样可以进行比较安全的类型转换.
?
所有的类都继承自Object类,这是所有类的一个基类.
一个比较好的类,需要复写Object类中的三个方法.
|- public String toString()
|- public boolean equals(Object obj)
|- public int hashCode()
在下面的例子中,类Student复写了上面的toString()方法和equals()方法,而且使用到了instanceof关键字,算是一个小复习题目了~
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | class Student //任意类都是继承了Object类,最好复写里面的toString()和equals()方法 { private String name; private int age; public Student(String name, int age) { this .name = name; this .age = age; } //复写Object类中的toString()方法,实现自定义toString() public String toString() { return "该学生的姓名是: " +name+ ",该学生的年龄是: " +age; } //复写Object类中的equals()方法,注意,Object类中equals()接收的是Object对象 public boolean equals (Object obj) { //如果被比较对象和比较对象的内存地址都是一样的,那肯定是同一对象 //注意: 内存地址的比较使用"==" if ( this == obj) { return true ; } else { //如果obj不是Student的实例,肯定不相等了,返回false; if (!(obj instanceof Student)) { return false ; } else { //走到这步,说明obj是Student的实例对象,进行类型转换后对比之 Student stu = (Student) obj; if ( this .name.equals(stu.name)&& this .age == stu.age) { return true ; } else { return false ; } } } } } public class Demo04 { public static void main(String args[]) { Student stu1 = new Student( "newsainton" , 23 ); Student stu2 = new Student( "newsainton" , 23 ); //使用toString()方法输出stu1对象 System.out.println(stu1.toString()); //使用toString()方法输出stu2对象 System.out.println(stu2.toString()); //比较stu1和stu2是否相等 System.out.println( "比较stu1和stu2是否相等: " + stu1.equals(stu2)); } } |
以上16个小知识点我用了3天看完了,算是JAVA这个面向对象语言的基础吧,从基本的语法结构到类的三大特点:封装,继承,多态,还有一些细节性的知识点的简绍,如this,super,static,final,abstract, interface,object类等等。到此,对JAVA算是有了一个基本的了解了吧。下面链接下所有的链接:
7天Java学习---1.Java发展及JDK配置
7天Java学习---2.Java标识符和基本数据类型
7天Java学习---3.运算符与表达式
7天Java学习---4.Java的分支循环语句
7天Java学习---5.Java数组和方法
7天Java学习---6.面向对象编程01-类对象的构建及对象的引用传递
7天Java学习---7.面向对象编程02-类的封装性以及构造方法
7天Java学习---8.面向对象编程03-String类的重点应用
7天Java学习---9.面向对象编程04-this关键字的使用
7天Java学习---10.面向对象编程05-面向对象程序的设计步骤
7天Java学习---11.面向对象编程06-Java的内部类及对象数组
7天Java学习---12.面向对象编程07-Java中的static关键字用法
7天Java学习---13.面向对象编程08-Java中继承的概念,子类实例化过程,super()及方法复写
7天Java学习---14.面向对象编程09-Java中重载与复写的区别、super与this的比较
7天Java学习---15.面向对象编程10-Java中final关键字,抽象类与接口
接下来4天还有一些章节,都是针对于特定知识点的,如文件I/0,网络,数据库等等,都已经写好,今天也一起都发出来,希望跟我一样,第一次学习JAVA的朋友,快速进入JAVA世界~~~
相关文章推荐
- Java学习笔记---16.面向对象编程11-Java多态性,instanceof及Object类
- java多态性,instanceof及Object类
- Java学习笔记18天---(16)
- (16)Java学习笔记——面向对象09——Object类
- java学习【知识点及代码16】
- java学习笔记(1)-Object类
- 黑马程序员--Java基础学习笔记【Object类、String类】
- JAVA基础18天速成学习笔记之第8天
- 18天Java学习---5.Java数组和方法
- 18天Java学习---11.面向对象编程06-Java的内部类及对象数组
- Java集合源码学习(16)_BlockingQueue接口的实现ArrayBlockingQueue
- 别样JAVA学习(五)继承上(1.1)Object类toString()
- Java学习_抽象类、接口、内部类_2014_1_16
- java学习(16)
- No_16_0229 Java基础学习第八天
- 【学习笔记】Thinking in java (第三版)第七章 多态性(Polymorphism)
- Java基础学习——Java多态性
- Java源码学习-Object类的hashCode和equals方法
- Java学习笔记18天---(13)
- JAVA学习--面向对象的特征三:多态性