继承:在多个类中具有相同的成员变量和成员方法,我们就可以把它抽取到一个类中(父类,也叫基类),在让多各类去继承这个类,这样多各类就可以得到父类的成员变量和成员方法了。
继承的关键字:extends
继承的特点:
a:java语言支持单一继承和多层继承
b:继承只有一个父类
继承中成员的特点:
*子类只能获取父类的非私有成员
继承中的就近原则:
谁离我近用谁(在类中有局部变量优先使用,其次是成员变量,两者都没有,看其父类的变量,都没有的话,程序报错)
super:可以获取父类中的成员变量和成员方法,用法和this相似。
继承中成员方法的特点:
当父类无法满足我们的要求时,自己写一个方法(这个就是重写或者叫覆盖),前提是要有继承关系,其他的条件不成立。
方法重写的应用场景以及注意事项:
权限必须大于等于父类的权限,否则会出现问题。
继承中构造方法的执行顺序:
在字父类的继承关系中,创建子类对象,调用子类构造方法时,如果子类构造方法的第一行代码没有调用父类的构造方法时,系统默认调用父类的无参构造。无论你是有参构造还是无参构造,第一步肯定要执行父类构造方法,是因为要先对父类的成员进行初始化,有可能子类会用到。
this和super的区别:
this:
a:调用子类的成员变量和成员方法
b:在子类构造第一行调用子类的其他构造方法
super:
a:调用的是父类的成员变量和成员方法
b:在子类的构造方法中去调用父类的构造方法
继承的优缺点:
优点:
*提高代码的复用性
*提高代码的可维护性
缺点:
*类的耦合性增强了
*开发原则:高内聚低耦合
*类与类的关系
匿名对象
什么是匿名对象?
*就是没有变量引用的对象
匿名对象的应用场景:
*只需要创建一次对象的时候可以使用匿名对象
*多次使用的话会浪费内存空间
匿名对象可以对成员变量进行赋值吗?
匿名对象可以对成员变量进行赋值,但是毫无意义
举例:
new student().age = 20;
system.out.println(new.student().age);结果还是0,而不是20。
匿名对象可以作为参数传参,但是在传参之前能做的事就很少了。
关键字final:
final是最终的意思
final是修饰符,可以修饰类,成员变量和成员方法。
*被final修饰的类:
被final修饰的类是最终的类,不能被继承
被final修饰的方法是最终的方法,不能被重写
被final修饰的变量是不能改变的,也就是常量
自定义常量:一旦被final修饰的成员变量,被初始化后就不可改变
注意:自定义常量必须被初始化,可选择显示初始化和构造初始化
抽象类:
抽象方法:
不同类的方法相似,但是描述方法又似乎不一样,所以我们只能抽取其中的声明(舍去方法体)这样只有声明没有方法体的方法就叫做抽象方法
关键字:abstrct
抽象类:
有抽象方法的类就叫做抽象类
注意:一个类继承一个抽象类,必须要重写它的抽象方法,要是不重写, 那他必定也要是抽象类
抽象类的特点:
*抽象方法必须在抽象类中
*抽象类和抽方法必须被abstrct修饰,少了哪一个都不行
*抽象类不能创建对象(也就是不能被实例化)
*抽象类中可以有非抽象类
*类和抽象类之间也是继承
抽象类的成员方法:
成员变量:
*可以有成员变量
*可以有常量
成员方法:
*可以有抽象方法
*可以有非抽象方法
构造方法:
*可以有构造方法,需要对抽象类的成员变量进行初始化
接口
优点:
*打破了单一继承的局限性
*降低了程序的耦合性
接口与抽象类的区别:
*类与接口是实现关系,而且是多实现,一个类可以实现多个接口
*类与抽象类之间是继承关系,java中是单一继承,一个类只有一个父类,是多层继承
成员变量和成员方法:
*抽象类可以有抽象方法和非抽象方法
*接口只能是抽象方法,而且修饰符是:public abstrct
构造方法:
*抽象类有构造方法
*接口没有构造方法
多态
*多态的前提子父类要是继承关系
*方法的重写
*父类引用指向子类对象
多态间的成员特点:
成员变量:编译时看左边,运行时还是看左边。
成员方法:编译时看左边,运行时还是看右边。
静态方法:编译时看左边,运行时还是看左边。
集合
集合的体系结构:
由于不同的数据(数据组织,存储方式)所以java为我们提供了不同的集合,但是功能都是相似的,不断地把共性相同的提取出来。
集合的遍历方式:
*通过toArray()把集合转换成数组,然后遍历数组
*通过itrator(),可以返回一个迭代器对象,通过迭代器对象来迭代集合
foreach:增强for循环,一般用于遍历集合或者数组
格式:
for(元素的类型 变量:集合或者数组的对象) {
可以直接使用变量;
}
Collection的子体系:List
*有序的(存储和读取的顺序是一样的)
*有整数索引
*允许重复的
List的常用子类:
ArrayList:
底层是数组结构,查询快,增删慢。
LinkedList:
底层结构是链表。查询慢,增删快。