黑马程序员_多态

------- android培训java培训、期待与您交流! ---------- 

多态

1.多态:事物存在的多种体现形态。

2.多态的体现:父类或者是接口的引用,指向自己的子类对象

      父类 f= new 子类();

3.多态的好处和弊端

好处:代码的复用性提高,扩展性增强,后期维护性增强,代码量也减少

弊端:只能访问父类中具备的方法,不可以访问子类中特有的方法。

4.多态的前提

必须是类与类之间有关系。要么继承,要么实现;通常会存在覆盖。

5.:Animal a=new Cat();//向上转型,类型提升

Cat c=Cata//向下转型

能转换的是父类的引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。

在多态中,自始至终都是子类对象在做着类型的变化。

例如.

class毕姥爷{

void 讲课(){

System.out.println("企业管理");

}

void 钓鱼(){

System.out.println("钓鱼");

}

}

class 毕老师 extends 毕姥爷{

void 讲课(){

System.out.println("JAVA");

}

void 看电影(){

System.out.println("看电影");

}

}

class {

public static void main(String[] args) {

毕姥爷x = new毕老师(); //毕老师对象被提升为了毕姥爷类型。

// x.讲课();

// x.看电影();  //错误.

毕老师y = (毕老师)x; //将毕姥爷类型强制转换成毕老师类型。

y.看电影();//在多态中,自始自终都是子类对象在做着类型的变化。

}

}

6.如何判断对象是哪一个具体的子类类型呢?

可以通过一个关键字instanceof

格式:对象 intanceof类型(类类型接口类型

7.在多态中,成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

8.在多态中,成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)

9.在多态中,静态成员函数的特点:

无论编译和运行,都参考做左边。

例子:

class Fu

{

       static intnum = 5;

       voidmethod1()

       {

              System.out.println("fumethod_1");

       }

       voidmethod2()

       {

              System.out.println("fumethod_2");

       }

       staticvoid method4()

       {

              System.out.println("fumethod_4");

       }

}

class Zi extends Fu

{

       static intnum = 8;

       voidmethod1()

       {

              System.out.println("zimethod_1");

       }

       voidmethod3()

       {

              System.out.println("zimethod_3");

       }

       staticvoid method4()

       {

              System.out.println("zimethod_4");

       }

}

class DuoTaiDemo4

{

       publicstatic void main(String[] args)

       {

             

              Fuf = new Zi();

       System.out.println(f.num);

              Ziz = new Zi();

              System.out.println(z.num);

              f.method1();//覆盖

              f.method2();//继承

              f.method3();//编译不通过

 

例如:

class A {

 

    public int i= 10;

   }

   class Bextends A{

    public int i= 20;

   }

   public classTest{

    publicstatic void main(String args[]){

       B b = newB();

        A a =b;     

       System.out.println(b.i);

       System.out.println(a.i);

    }

 }

Object

1.Object是所有类的直接或者间接父类,传说中的上帝。

该类中定义的是所有对象都具备的功能。

2.== equals的区别

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

2). ==”在基本数据类型中比较的是基本数据类型的具体数值。而“==”在引用数据类型中比较的是对象的地址值。

3). boolean equals(Objectobj)方法,在Object类中是比较对象的地址值。日后开发要覆盖equals方法,建立对象自己独特的比较形式。

例子:

public boolean equals(Object obj){

if(!(obj instanceof Person))

return false;

Person p = (Person)obj;

return this.age == p.age;

}

例子:

  Integer a = new Integer(55);

  Integer b = new Integer(55);

  Integer c = 55;

  Integer d = 55;

  Integer e = 155;

  Integer f = 155;

  System.out.println(a==b);//false 

 //这里比较的是两个对象的地址,new了两个对象,开辟了两个不同的空间,所以这两个空间的地址当然不一样了。只是这两个对象里边的值都指向的是常量池里边的 55.

 System.out.println(c==d);//true

System.out.println(e==f);//false

   //Integer类的内部,有一个常量静态数组, Integer类被加载的时候,预先创建了-128 ~ 127Integer对象,所以当声明的Integer类型变量的值在-128 ~ 127的范围内时,不会新创建对象, 直接引用数组中创建好的。

3.StringtoString():将对象变成字符串,默认返回的格式:类名@哈希值=getClass().getName()+'@'+Integer.toHexString(hashCode());

例子:

public String toString(){

return "person : "+age;

}

4.ClassgetClass():获取正在运行的对象所属的字节码文件的对象。也就是说如果Demo d = new Demo();d.getClass():获取的就是d执行的对象所属的字节码文件Demo.class对象。

5.通常equalstoStringhashCode在应用中都会被复写,建立具体对象的特有的内容,也就是覆盖。

 

------- android培训java培训、期待与您交流! ---------- 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值