这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)
一、多态-概念
1、多态:可以理解为事物存在的多种体现形态(在对象上的体现)。
2、多态的扩展性
<1>表现形式:
父类的引用指向自己的子类对象。父类的引用也可以接收自己的子类对象。
<2>多态的前提:
必须类与类之间有关系,要么实现,要么继承。通常还有一个前提:覆盖。
<3>多态的好处:
多态的出现大大提高程序的扩展性。
<4>多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
3、多态-转型(类型提升,类似于低级变量类型向高级的类型的转换)
<1>不能将父类对象转换成子类类型
<2>当父类的引用指向自己的子类对象时,该引用可以被提升,也可以被强制转换。
<3>多态自始至终都是子类对象在做变化。
Instanceof:(用于判断对象是何种子类型)
4、多态中成员的特点
<1>在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有
编译失败!
在运行时期:参阅对象所属的类是否有调用的方法。
简单的说:成员函数在多态调用时,编译看左边,运行看右边。
<2>在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
<3>在多态中静态成员的特点:
无论编译和运行,都参考左边
5、多态的主板实例(拓展性的体现)
interface PAI
{
public abstract void open();
public abstract void close();
}
class NetCord implements PAI
{
public void open()
{
System.out.println("NetCord Run...");
}
public void close()
{
System.out.println("NetCord Close...");
}
}
声卡的实现:
class SoundCord implements PAI
{
public void open()
{
System.out.println("SoundCord Run...");
}
public void close()
{
System.out.println("SoundCord Close...");
}
}
class MainBorad
{
public void Run()
{
System.out.println("Run .....");
}
public void fuction(PAI p)
{
p.open();
p.close();
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
MainBorad m = new MainBorad();
m.Run();
m.fuction(new NetCord());
m.fuction(new SoundCord());
}
}
二、内部类
1、内部类的访问规则
1.内部类可以直接访问外部类中的成员,包括私有。
原因:之所以内部类可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,
格式外部类.this。
2.外部类要访问内部类,必须建立内部类对象。
2、内部类访问格式
<1>访问格式
1.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,直接建立内部类对象。
格式:外部类名.内部类名 变量名 = new 外部类对象.内部类对象。
<2>当内部类在成员位置上,就可以被成员修饰符所修饰。
比如:private:将内部类在外部类中进行封装。
static:内部类就具被static特性。
*注释:
当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
在外部其他类中,如何直接访问static内部类的非静态成员呢?
new Outer.Inner().function();
在外部其他类中,如何直接访问static内部类的静态成员呢?
Outer.Inner.function();
注意:
当内部类中定义了静态成员,该内部类必须是static的。
当外部类中的静态方法询问内部类时,内部类也必须是static的。
3、内部类的定义原则
当描述事物时,事物的内部还有事物,该事物用内部类来描述。
因为内部事务在使用外部事物的内容。
4、匿名内部类
<1>内部类定义在局部时:
1.不可以被成员修饰符修饰。
2.可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
jdk升级后:局部变量不用final修饰,一样可以被使用。
5、匿名内部类特点:
<1>匿名内部类其实就是内部类的简写格式。
<2>定义匿名内部类的前提:
定义匿名内部类必须是继承一个类或者实现接口。
<3>匿名内部类的格式: new 父类或者接口(){定义子类的内容}
<4>其实匿名内部类就是一个匿名子类对象。