JAVA笔记(九)-----多态
多态:可以理解为事物存在的多种形态
1.多态的体现:
父类引用指向子类对象
父类的引用也可以接收自己的子类对象
2.多态的好处:
多态的出现大大提高了程序的扩展性
3.多态的前提:
必须是类与类之间有关系,要么是继承要么是实现
通常还有一个前提:存在覆盖
4.多态的弊端:
提高了扩展性,但只能用父类引用访问父类中的成员。(想要访问子类中的成员需要进行强制类型转换,向下转型)
在多态中成员函数的特点:
在编译时期:参阅引用行变量所属类中是否有方法,如果没有则编译失败。
在运行时期:参阅对象所属类中是否有调用方法
简单总结:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考引用型变量所属的类。
在多态中,静态成员函数的特点:
无论编译和运行,都参考引用型变量所属的类。
Object是所有类的基类(超类)
对象间比较可以用Object类中的equals函数
若想定义自己的比较方法可以复写equals函数
例如:
1 class Demo 2 { 3 public boolean equals(Object obj)
{
if(!(obj instanceof Demo))//判断obj是否属于Demo类
{
return false;
}
Demo d = (Demo)obj;
return d.num == this.num;
}
4 }
内部类
1.将一个类定义在另一个类的里面,里面那个类就成为内部类(内置类嵌套类)
2.访问特点
①内部类可以直接访问外部类中的成员,包括私有成员
②而外部类要访问内部类中的成员必须建立内部类的对象。
内部类访问规则:
1.内部类可以直接访问外部类成员,包括私有
之所以可以直接访问外部类成员是因为内部类持有一个外部类引用,格式:外部类名.this
2.外部类要访问内部类必须建立内部类对象
访问格式:
1.当内部类定义在外部类成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象
格式为:外部类名.内部类名 变量名 = new 外部类名().内部类名();
2.当内部类在成员位置上,就可以被成员修饰符所修饰
比如private:将内部类在外部类中进行封装
static:内部类就具备了static的特性
当内部类被static修饰后,只能访问外部类中的static成员。出现了访问局限
外部其他类中访问静态内部类的非静态成员
格式:new Outer.Inner().function();//static内部类可以直接被外部类名调用而不用创建对象
外部其他类中直接访问静态内部类中的静态成员
格式:Outer.Inner.function();//都是static修饰的,直接类名访问不用new
注意:当内部类中定义了static成员,则该内部类必须声明为static。
当外部类中的static方法访问内部类时,内部类也必须是static的
当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容。
内部类定义在局部(方法内)时:
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
匿名内部类
1.匿名内部类就是内部类的简写格式。
2.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
3.匿名内部类格式:new 父类或者接口名(){定义子类的内容}
4.其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象
5.匿名内部类中定义的方法最好别超过3个

浙公网安备 33010602011771号