1.继承
1.1概念:就是将对各类的共性内容抽取出来放到一个独立的类中,该类和其他类产生一种"继承关系"(关键字extends修饰)
1.2格式:
权限修饰符 子类名 extends 父类名{ }
1)特点:
在Java中,类与类只支持单继承,不支持多继承,但支持多层继承
2)优点:
提高了代码的复用性;
提高代码的维护性;
存在继承关系,是多态的前提条件;
1.3重点
1.3.1在继承中,如果父类成员变量名和子类变量名相同时,如何执行?
方法:坚持就近原则;
先在子类中的局部位置;
再在子类的成员位置;
然后在父类成员位置找;
若以上位置,则会报错.
1.3.2 如果父类没有提供无参构造方法,子类出现问题(构造方法全部报错),解决方法如下
1)手动给出父类的无参构造方法(建议永远给出无参构造方法)
2)不提供父类无参构造方法,需要通过super(xx),间接的让子类访问父类的有参构造方法
3)通过this()访问本类的无参,然后在通过本类无参构造方法 间接的访问父类的有参构造(super(xx)子类中的构造方法有一个只要能够让父类数据初始化完毕即可!
2.多态
2.1概念:一个事物在不同时刻体现出来的状态.
1)多态的产生前提条件
必须存在继承关系;
必须存在方法重写,子类覆盖父类功能;
必须要有父类引用指向子类对象: 父类名 对象名=new 子类名();
2)多态的好处:
提高代码的复用性,由继承保证;
提高代码的扩展性,由多态保证
3)多态的弊端:不能访问子类特有功能;
解决方法:
创建具体的子类对象 子类名 对象名 = new 子类名(); 这种方式,比较消耗内存空间(在堆内存中开辟新的空间!);
使用向下转型:将父类的引用强制转换子类的引用:
子类名 子类对象名 = (子类名)父类的引用
3.接口
概念:体现的是事物的一种扩展功能;
格式:接口名 对象名=new 子实现类名();
注意事项:
接口不能实例化(及创建对象),但可以通过接口的子实现类实例化;
接口中只能定义抽象方法;
接口与抽象方法的区别:
接口 | 抽象类 | |
---|---|---|
成员变量 | 只能是常量,存在默认修饰符public static … | 可以是成员变量,也可以是常量 |
成员方法 | 只能是抽象方法,存在默认修饰符public abstract… | 可以是抽象方法,也可以是方法体 |
构造方法 | 不存在构造方法 | 存在有参或无参构造方法 |
设计理念 | 存在like a关系 | 存在like is关系 |
关系 | 类与类:继承关系;可以单继承,但不能多继承,但可以多层继承 | |
类与接口:实现关系;一个类继承另一个类的同时可以实现多个接口 | ||
接口与接口:继承关系,即可单继承,也可以多继承 | ||
– | – |
4.内部类
4.1概念:在一个类内嵌套另一个类;
4.2分类:
成员内部类:在外部类的成员位置
局部内部类:在外部类的成员方法中
匿名内部类:在局部位置使用;(省去繁琐代码,不需要定义类里面的子类或接口的子实现类,写法简单)
4.3成员内部类的调用格式:
非静态的:
外部类名.内部类名 对象名=new 外部类名().new 内部类名();
静态的
外部类名.内部类名 对象名=new 外部类名.内部类名();
4.4 匿名内部类:
格式1:new 类名/接口(){ 重写方法; };
一个接口中有多个抽象方法的匿名内部类格式2:
接口名 对象名=new 接口名(){ 重写方法};