------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
一、抽象类abstract
当多个类中出现相同功能,但是功能主体不同、这是可以进行向上抽取。这时,只收取功能定义。不抽取功能主体。
抽象:看不懂。、
抽象类的特点:
1抽象方法一定在抽象类中。2抽象方法和抽象类都必须被abstract关键字修饰。3抽象类不可以用new创建对象。因为调用抽象方法没 意义。4抽象类中的方法要被调用,必须由子类复写所有的抽象方法后。建立子类调用、如果子类只覆盖了不凡抽象方法,那么该子类还是以个抽象类。
抽象类和一般类没有什么太大的不同,
该怎么样描述事物就什么描述。只不过该事物中出现了一些看不懂的东西。这些不确定的部分,也是该事物的功能,需要明确出来,当无法定义主体。
通过抽象方法来表示。
抽象类比一般类多了抽象方法。就是在类中可以定义抽象方法。抽象类不可以实例化。抽象类中可以不用定义抽象方法。这样做仅仅是不让该类建立对象。
二、接口interface
接口:初期理解。可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
接口定义时,格式特点:
1·接口中常见定义:常量。抽象方法2.接口中的成员都有固定的修饰符。常量:public static final,方法: piblic abstract
记住:接口中的成员都是public的。
接口:是不可以创建对象的,应为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实力化。否则子类是个抽象类。
接口可以被类多实现。也是对多继承不支持转换形式,java支持多实现。
接口的特点:
1接口是对外暴露的规则
2接口是程序的功能扩展
3接口可以用来多实现
4接口与接口之间可以继承。支持多继承。
5类与接口之间是实现关系,而类可以继承一个类的同时实现多个接口。
三、多态
1、多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接受自己的子类对象。
2、多态的前提
必须是类与类之间有关系,要么继承、要么实现
通常还有一个前提:存在覆盖
3、多态的好处
多台的出现大大的提高了程序的扩展性
4、多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
在多态中非静态成员函数的特点:
在编译时期:参阅引用类型变量所属的类中是否有调用方法。如果有。编译通过。如果没有编译失败
在运行时期:参阅对象所属的类中是否有调用方法、
简单总结就是:成员函数在多态调用时,边一看左边。运行看右边。
在多态中,成员变量的特点:
无论编译和运行。都参考左边(引用型变量所属的类)
在多态中。静态成员函数的特点:
无论编译和运行,都参考左边。
四、内部类
内部类的访问规则:
1、内部类可以直接访问外部类中的成员,包活私有。
之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名:this
2.外部类要访问内部类,必须建立内部类对象。
访问格式:
1当内部类定义在外部类船员位置上。而且非私有,可以再外部其他类中。
可以直接建立内部类对象。
格式:
外部类名,内部类名 变量名=外部类对象。内部类对象;
Outer.Inner in=new Outer().new Inner();
2.当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,private:将内部类在外部类中进行封装
static:内部类就具备static的特性。
当内部类静态修饰后。只能直接访问外部类中的静态成员了。也就出现了访问局限。
在外部其他类中,如何直接访问静态内部类的非静态成员呢?
new Outer.Inner().function()
在外部其他类中,如何直接访问静态内部类的静态成员呢?
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是静态的。
当外部类中的静态方法访问内部类时,内部类也必须是静态的。
当描述事物时,事物的内部还有事物,该事物用内部类描述
因为内部事务在使用外部事物中的内容。
匿名内部类:
1、匿名内部类其实就是内部类的简写格式。
2、定义匿名内部类的前提
内部类必须继承一个类或实现以个接口。
3、匿名内部类的格式: new父类或者接口 (){定义子类内容}
4.其实匿名内部;类就是一个匿名子类对象。而且这个对象有点胖。也可以理解为带内容的对象。
5,匿名内部类中定义的方法,最好不超过3个。
匿名内部类写法:
abstract class AbsDemo
{
abstract void show();
}
class Out
{
int x=3;
/*
class Inner extends AbsDemo
{
void show()
{
System.out.println("show:"+x);
}
}
*/
public void function()
{
//new Inner().show();
new AbsDemo()//因为没名字。所以用父类来创建子类对象
{
void show()//子类复写父类内容
{
System.out.println("x==="+x);
}
}.show();//子类对象调用show方法
}
}