黑马程序员 一步一步往上爬 学习毕老师java视频第08天

时间:2021-06-25 16:19:54

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

毕向东 Java基础视频教程08天01 02面向对象(多态-扩展性)

1.  多态性:一个对象的多种表现形态。

2.  父类的引用既可以指向子类对象,也可以接收子类对象。

Animal x=new Cat();

Function(new Cat());--------void function(Animal a)

3.多态的出现大大提高了代码的扩展性。

4. Animal x=new Cat();

x.eat();

New了一只猫,小猫由升级为动物(小猫的升级版),用动物去调用方法,不过因为这是小猫升级的动物,所以该动物中具有的是能被小猫所继承的和小猫所复写的,而不是最开始的动物,也不是完全的小猫,因为她不具有小猫的特有属性。就把x视为小猫的升级,而它既是cat的对象,也是animal的对象。

1.  多态的局限:

只能访问父类成员,不能访问子类特有方法。

 

 

 

 

毕向东 Java基础视频教程08天03 04面向对象(多态-转型-)

1,  自动类型提升

byte b=5; int x=b;b本来是byte类型,但是又被定义为int型,所以就自动类型提升。而左边是把5定义为byte型,然后赋值给byte型的b.

3.  我现在想要一只猫,你可以把由猫升级的动物降级为猫,但是你不能把直接把动物降级为猫。

 

毕向东 Java基础视频教程08天04面向对象(多态-实例)

 

1.指挥不同的子类对象做相同事情时,不用创建一个对象调用一个方法,创建一个对象,在调用该方法,而是用父类作为参数对这些子类(对象)进行接收,然后统一调用一个方法,在代码体现上就只用写一次调用方法了。

2.即只需要定义一个父类参数的具有该方法的方法,也可以进一步把该方法封装在类里,通过类调用该方法。但是要注意调用的方法不能是对象特有的。

 

 

毕向东 Java基础视频教程08天05面向对象(多态中成员的特点)

1.多态中调用非静态方法:编译时是看父类中是否有调用的方法,、

运行时是看子类中是否有调用的方法。

2.多态中成员变量的特点:

调用的变量都是父类中变量,因为f(引用变量)本来就是父类的在调用时肯定先调用本类的变量。

3.多态中对象调用静态方法和变量时,由于静态方法是随着类的加载而加载到静态方法区的,通过类去直接调用,所以通过对象(引用变量)去调用静态方法的时候,只需要看该引用变量所属的类,然后通过该类去调用该方法。

4.  对于成员变量和静态调用哪一个关键一句话:看引用变量所属的类

 

 

 

毕向东 Java基础视频教程08天06面向对象(多态的主板示例)

1.  接口的出现提高了功能的扩展,多态提高了程序的扩展性。

2.  接口型引用指向子类对象提高了程序扩展性

PCI p=new NetCard();

3.  代码:

interfacePCI

{

public void open();

public void close();

 

}

classMainBoard

{

public void run()

{

           System.out.println("MainBoard_run");

}

public void usePCI(PCI p)

{

           if(p!=null)

           {

           p.open();

           p.close();

           }

}

}

classNetCard implements PCI

{

public void open()

{

           System.out.println("NetCard_open");

}

public void close()

{

           System.out.println("NetCard_close");

}

}

classSoundCard implements PCI

{

public void open()

{

           System.out.println("SoundCard_open");

}

public void close()

{

           System.out.println("SoundCard_close");

}

}

class  InterfaceDemo

{

public static void main(String[] args)

{

          

           MainBoard m=new MainBoard();

           m.run();

           m.usePCI(new NetCard());

}

}

 

 

 

毕向东 Java基础视频教程08天07面向对象(多态的扩展示例)

1.  通过接口降低了主程序和连接之间的耦合性。

以前的话主程序里当定义了UserInoJBC类型引用时,就必须创建UserInoJBC对象,

   主程序里当定义了UserInoHibernate类型引用时,就必须创建UserInoHibernate对象,

这样主程序和连接之间耦合性就很强,但是通过对几个类的抽象定义出一个访问用户信息UserInoDao接口之后,并让几个类实现该接口变成其子类,就可以在主程序里定义一个接口类型引用,这样只要是接口的子类你爱创建什么对象就创建什么对象,然后用它的升级去操作,这样就降低了主程序和连接之间的耦合性。

 

 

 

 

毕向东 Java基础视频教程08天08面向对象(object类型-equals())

1.  object类中定义的是所有类中都具有的功能。

2.  成员变量private之后外界不发访问,但是类类部是可以对它进行操作的。

3.  代码如下:

ass Demo

{

   private int num;

   Demo(int num)

   {

            this.num=num;

   }

   public boolean equals(Object obj)

   {

            if(!(obj instanceof Demo))

                     return false;

            Demo d=(Demo)obj;

            return this.num==d.num;

   }

}

classPerson

{

}

class  DuoTaiDemo

{

   public static void main(String[] args)

   {

            Demo d1=new Demo(3);

            Demo d2=new Demo(3);

            Person p=new Person();

            System.out.println(d1.equals(d2));

           

   }

}

 

 

 

毕向东 Java基础视频教程08天09面向对象(object类型-toString())

1.  转换成十六进制:Integer.toHexString()

2.  hashCode() 哈希值得出来的是十进制地址值

3.  getClass() 是对象调用的,用来获取对象运行时所属的类文件,类型为Class

4.  getName()是类文件调用的,用来获取类文件的名称

5.  想要获取一个对象的类名,首先获取该对象的类文件(x.class)名称,然后用类文件对象getName()获取该类文件对象的Name即x。

6.  class Class()

{

   getName()

{}

}

该名为Class的类的对象是A.class  B.class这些类文件。所以只能用类文件调用getName()这个专用方法。  getClass()不属于这个类里的方法,所以不是用类文件调用的,而是用一般对象调用。

7.  toString()用来获取对象的类型@对象的十六进制地址值,也即toString()返回的字符串是类型@地址值,不过返回的这个字符串没太大的意义,所以一般都被复写,自己去定义返回的字符串内容。

8.  根类Object 里的方法:

equals(Object obj)

getClass()

hashCode()

toString()

 

 


---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>