您的位置:首页 > 移动开发 > Objective-C

18天Java学习---16.面向对象编程11-Java多态性,instanceof及Object类

2012-01-05 10:35 465 查看
  多态是一个之前一直搞不清楚的概念,通过这次笔记,对多态的概念及应用有了较全面的认识,同时学习了instanceof关键字以及Object类的特点.

1. Java中类的多态

      所谓类的多态性,是指子类对象和父类对象之间的相互转换. 这里分为两部分做笔记: 

   1.1 子类对象向父类对象转换(向上转换)



      子类对象向父类对象的转换是自动转换.格式为: 父类对象 = 子类对象.

      这里需要注意的一点事: 子类对象转换为父类对象后,所调用的方法一定会是子类复写后的方法而非父类原有方法.

      例如下面的例子:      

?
   1.2 父类对象向子类对象转换(向下转换)



      父类对象向子类对象的转换是强制转换. 格式为: 子类对象 = (子类名称) 父类对象

      在父类对象向子类对象的转换的过程中,需要注意的是: 如果父类对象是实例化的父类对象而不是用子类对象转换过来的对象,则不能在强制转换为子类对象,否则会出现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关键字,算是一个小复习题目了~      

?

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世界~~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息