A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Wqi 高级黑马   /  2015-7-25 21:00  /  231 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.多态
多态:同一个实体具有多种形式,可以理解为事物存在的多种体现形态。
人:男人、女人。
动物:猫、狗。
猫 x = new 猫();
动物 x = new 猫();
重载和覆盖是函数的多态。重载是编译时的多态,覆盖是运行时的多态。
个人理解:如果编译时和类型和运行时类型不同,就出现多态。
(1).多态的基本体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
(2).多态的前提
必须是类之间有关系,有么继承,要么实现。
通常还有一个前提:存在覆盖。
(3).多态的好处
多态的出现大大的提高程序的扩展性。屏蔽不同子类对象间的差异,写出通用代码,进行通用编程,以适应需求的不断变化。
只修改方法的实现,不必修改方法的声明。
(4).多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类的成员。


2.多态转型
Animal a = new Cat(); //类型提升。向上转型。
a.eat();

如果想要调用猫的特有方法时,如何操作?
强制将父类的引用,转成子类类型。
                Cat c = (Cat)a; //向下转型
                c.catchMouse();
千万不要出现这样的操作:就是将父类对象转成子类类型。
能转换的是父类引用指向来了自己子类对象时,该引用可以被提升,也可以被强制转换。
多态自始自终都是子类对象在做着变化。

对象名  instanceof  类   :判断指定的变量名此时的引用的真正类型是不是当前给出的类或者子类。

3.多态中成员的特点
(1)多态中成员函数的特点
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过;如果没有,编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
(2)多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
(3)在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。


4.Object类
Object:是所有对象的直接或者间接父类,类层次结构的根类,传说中的上帝。所有对象的超类。
该类中定义的肯定是所有对象都具备的功能。
java认为所有对象都具备比较性。equals(Object obj)指示其他某个对象是否与此对象“相等”。
Object类中已经提供了对对象是否相同的比较方法。
如果自定义类中也有比较相同的功能,没必须重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可。这就是覆盖。
java认为所有对象都能变成字符串。 toString()  返回对象的字符串表示。
                返回的字符串:getClass().getName +'@' +Integer.toHexString(hashCode())
所有对象都有哈希码值。hashCode() 返回对象的哈希码值。
getClass()  返回此Object的运行时类。
Class类中的getMethods() 反编译。
一般都把Object类的方法复写。



2 个回复

倒序浏览

个人视频学习10

本帖最后由 Wqi 于 2015-7-25 21:28 编辑

个人视频学习小结10
1.内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。访问特点:
(1).内部类可以直接访问外部类中的成员,包括私有成员。
之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式: 外部类名.this
(2).外部类要访问内部类中的成员必须要建立内部类的对象。
访问格式:
(1).当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。
格式: 外部类名.内部类名 变量名 = 外部类对象.内部类对象;Outer.Inner in = new Outer().new Inner();
(2).当内部类在成员位置上,就可以被成员修饰符所修饰。
比如:private  :将内部类在外部类中进行封装。
static  :内部类就具备了静态的特性。
当内部类被static修饰后,只能直接访问外部类中的static成员。出现访问局限。
       在外部其他类中,如何直接访问static内部类的非静态成员呢?new Outer.Inner().function();
       在外部其他类中,如何直接访问static内部类的静态成员呢?Outer.Inner.function();注意:当内部类中,定义了静态成员,该内部类必须是静态的。
当外部类中的静态方法访问内部类时,内部类也必须是静态的。
(3)内部类定义在局部时:
不可以被成员修饰符修饰;
可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
注意:
当描述事物时,事物的内部还有事物,该事物用内部类来描述。
因为内部事物在使用外部事物的内容。
内部类只有定义在成员位置上才能被私有修饰。
局部内部类不能定义静态成员。
非静态没对象不运行。
从内部类中访问局部变量,该变量需要被声明为最终类型。


2.匿名内部类
(1).匿名内部类其实就是内部类的简写格式。
(2).定义匿名内部类的前提:内部类必须继承一个类或者实现接口
(3).匿名内部类的格式: new 父类或者接口(){定义子类的内容}
(4).其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。        
(5).匿名内部类中定义的方法最好不要超过3个。注意:匿名内部类适合只使用一次的类,匿名内部类里不能定义构造函数。




回复 使用道具 举报
谢谢分享,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马