---------------------- <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>