您的位置:首页 > 职场人生

面向对象总结-05-----黑马程序员

2013-09-02 16:29 239 查看
ASP.Net+Android+IOS开发------期待与您交流
 
< Object类,内部类,匿名内部类>
1. Object类

 * 在java中,有一个老大,皇帝,叫做Object类

 * 任何一个类,都是Object的子类

 * 任何一个类,都直接,或者间接继承自Object类

 * Object类有构造方法吗?构造方法第一行是super()

2. Object类中的方法

 * toString();

    * toString(),返回此对象的字符串表现形式

    * 覆盖toString()建立我们自己的字符串表现形式

    * 返回本对象中成员属性

 * hashCode()方法

   * 返回int

   * 22608339   @ 158f9d3   

   * 原来我们看到的这个十六进制,是被转换后的哈希值

   * 哈希值,不是地址值

   * 程序员参考的,配合后期集合使用 Hashtable

 * equals()方法  *****

   * java工程师(Oracle)认为,任何对象都具备比较性

   * Object类,定义类一个比较对象的功能,equals()方法

   * equals()方法是所有对象都具备的,可以使用这个方法,进行对象之间的比较

   * equals()方法的原始代码

       public boolean equals(Object obj){

         return (this == obj);

       }

   * 覆盖equals方法,建立对象自己的比较形式,没有必须要比较地址值

   * 面试题:== equals的区别

      1. == 比较运算符 equals是Object定义的方法

      2. == 在基本数据类型中,比较的是基本数据类型的具体数值

         == 在引用数据类型中,比较的是对象的地址值  p == p1

      3. equals方法,Object类的方法,比较对象的地址值

         覆盖equals方法,建立对象自己独特的比较形式

   * 日后开发。equals方法就是一个规范,只要我们调用对象的equals方法,就是在做对象之间的比较

       怎么比较,由equals方法中进行定义

下面是Object类中的方法的覆写并自己定义比较方法

//覆盖equals建立对象自己独特的比较方式
class Person
{
private String name;
private int age;

Person(String name,int age){
this.name = name ;
this.age = age;
}
//比较对象中的年龄,比较的结果不重要,写equals方法很重要

public boolean equals(Object obj){//Object obj = p2;obj.age;

if(obj ==null)//健壮性判断,如果传递的是null,不要在比较了
return false;

if( this == obj)//健壮性判断,如果是同一个对象,直接返回真
return true;
//return this == obj
if(obj instanceof Person){
Person p = (Person)obj;
return this.age == p.age;
}
return false;
}
}

class ObjectDemo1
{
public static void main(String[] args)
{
Person p1 = new Person("lisi",25);
Person p2 = new Person("zhangsan",25);
boolean b = p1.equals(p2);
System.out.println("b="+b);
}
}


 3. 内部类,类中类,嵌套类

   * 在一个类的内部,还有另外的一个类

   * 内部类,可以直接使用外部类成员,包括私有

   * 但是,如果外部类,要使用内部类中成员,必须要建立内部类的对象

 4. 内部类的访问格式

   * 访问的是内部类方法,内部类,和内部类的方法,非静态

     外部类名.内部类名 变量 = new 外部类对象().new 内部类对象();

     变量.内部类方法名();

   * 访问内部类的方法,内部类,和内部类的方法,都是静态

     外部类名.内部类名.内部类方法名();

   * 访问内部类的方法,内部类是静态的,内部类的方法,非静态

     外部类名.内部类名 变量 = new 外部类名.内部类对象();

     变量.内部类方法名();

   局部内部类,访问局部变量,局部变量被final修饰

   原因在于生命周期:

   如果局部方法出栈局部变量,肯定也消失了,如果被final修饰

   变量成了常量,存储在方法区的常量池中,生命最长

   此时如果局部方法出栈,但是局部的内部类依然还有对象的引用的话

   是可以访问,局部变量的,因为局部变量的生命大于了对象的生命

 5. 匿名内部类--记住格式 AWT(图形化界面)会用

    * 匿名内部类,有一个前提,必须继承或者是实现一个接口

    * 接口名 变量 = new 接口名(){

       覆盖抽象方法

    };

    变量.方法名();

内部类的应用访问方法的代码实现

class Outer
{
private static int x = 3 ;
static class Inner//内部类,类中类,写在了外部类的成员位置
{
private  static int x = 4 ;

public static  void show(){
int x = 5 ;
System.out.println("Inner...show"+Outer.x);
}
}
}

class InnerClassDemo
{
public static void main(String[] args)
{
//外部类名.内部类名 变量 = new 外部类对象().new 内部类对象();
// 变量.内部类方法名();
//Outer.Inner oi = new Outer().new Inner();
//oi.show();

// 外部类名.内部类名.内部类方法名();
Outer.Inner.show();

//  Outer.Inner oi = new Outer.Inner();
//  oi.show();
}
}


interface A
{
void show();
void sum();
}
class Outer
{
public void method(){
//建立子类,实现A接口,覆盖抽象方法,一步完成

//new 接口或者父类 对象不是分号结束,是大括号结束
A a = new A(){  //建立实现类对象,并覆盖方法,一步完成
public void show(){
System.out.println("匿名内部类。。。show");
}

public void sum(){
System.out.println("匿名内部类。。。sum");
}
};
a.sum();
a.show();
}
}

//建立子类,实现A接口,覆盖抽象方法
/*class AImp implements A
{
public void show(){

}
public void sum(){

}
}*/
class NiMingDemo
{
public static void main(String[] args)
{
new Outer().method();
}
}


 6. 模板方法设计模式

   * 统计什么代码,先期不确定,不知道统计的是什么,但是明确一点,统计的代码不变

       统计的内容发生了变化

       将变化的内容,对外暴露出去,延迟到子类实现

   * 先期做什么事情,我不清楚全部,但是清楚一部分内容

       如果出现这样的情况,将不清楚的部分,对外暴露出去,由子类的延迟实现

       这样解决问题的方式,模板方法设计模式

 7. 多态的案例,数据库的模拟操作

    * 利用多态的技术,实现数据库的瞬间转换

    * java程序,不直接操作数据库,通过一个接口的形式,来实现功能

    * 数据库的功能有4个,增删改查

ASP.Net+Android+IOS开发------期待与您交流
 详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: