概念: 从一个类中衍生出(派生出)其他类的过程 原有的类: 父类、超类、基类 其他类: 子类 、派生类 好处: 1.让类与类间产生了–继承关系 2.提高了代码的复用性 3.有了第三特征—多态 弊端: 增强了耦合性 格式: class A extends B{} extends : 继承、 扩展的意思 A 是子类, B 是父类 子类继承父类后,子类对象可以直接操作父类中的成员(父类中的成员被子类继承了)。 子类中除了继承的父类成员外,还可以有自己特有的属性和行为。 注意: 1.私有成员不被继承的 但实际上,子类还是继承了继承私有成员,只不过子类不能直接操作私有成员,相当于把私有权限也继承了,想要操作只能过程继承的get和set方法间接操作。 2.构造方法不被继承 假设继承了,方法名就是类名,但是继承的方法名是父类类名,此时方法名冲突。 特点: 在Java中,一个子类只能有一个父类,这个特点称为—单继承 一个父类可以有多个子类。 为什么不允许多继承呢?(一个子类可以有多个父类) 假设允许多继承,多个父类中有相同的方法声明,但是方法体不同,创建子类对象,调用该方法,不能确定执行哪个,因此不允许多继承。
在Java中,不允许多继承,但是允许多层继承(类似与家谱) 相当于是A 继承 B ,B 继承C ,C 继承 D…, 这种模式称之为叫做继承体系。 功能最多的是:A类 ;功能是整个体系中最共性的:D类。 学习这样的体系,从上到下去学习,意思就是先学最顶层的,依次向下学习。使用最子类的。 在Java中,有一个最顶层的父类,是Object类。我们所学习的类或自己创建的类都是该类的直接或间接子类。 注意:不能为了提高代码的复用性,而乱使用继承,必须有is–>a关系才可以使用(子是父一种) 例子: class Cat{ eat(){} } class Dog{ eat(){} } 这两个类中有共性内容,但是它俩不能继承,没有is-a关系。 可以将共性内容进行向上抽取,抽取到Animal类中。Animal分别与Cat和Dog 有继承关系,即is-a关系。
变量: 当子类和父类中出现同名的变量,创建子类对象,访问该属性,访问的是子类中的。 如果想要访问父类中的该变量,使用关键字super来访问。
这两个关键字的用法是相同的 区别是 this:代表的是当前类对象自己的引用,可以访问属性和方法 (子类中和父类中) 调用重载的构造方法,必须写在第一行 super:代表的是当前类对象的父类的引用,可以访问属性和方法(父类中的) 调用构造方法,必须写在第一行(父类) 注意:“就近原则” 方法: 当子类中和父类中出现了相同的方法声明,但是方法体不同,创建子类对象,调用该方法运行的是子类中的方法体内容,这种现象称之为叫做:方法的重写(覆盖)。
在一个类中,方法名相同,参数列表不同,与返回值类型无关。 参数列表不同: 个数、顺序、类型
在子类中,对父类中的方法进行重写。 重写前提: 1.方法声明要与父类中的方法声明一致 2.访问权限修饰符大于等于父类的权限 3.可以通过注解@Override来验证是否是重写方法,不是则会在编译时期报错 该注解写在重写方法的上边(写在子类中) 4.jdk5.0版本后,允许重写的返回值类型是父类方法返回值类型的子类 即:返回值类型可以小于等于父类 5.私有方法不重写 为什么要重写? 父类方法的方法体不满足于子类的需求,有想要保留该方法的声明,因此进行重写。 想要在子类中调用父类中的方法,使用关键字super,格式:super.方法名(); 构造方法: 当创建子类对象时,发现父类的构造方法也执行了,原因时在子类构造方法的第一行有一条隐藏的 super(); 语句,该语句的作用就是去调用父类中的无参数的构造方法。 如果父类中没有无参数的构造方法,那么子类必须在构造方法的第一行显示写出super(参数) 这样的动作目的就是为了让父类的构造方法先执行,即父类的属性先进行初始化。 在子类中定义的重载形式的构造方法中,使用this(参数) 语句调用了其他构造方法,那么这个构造方法的中不能出现super()语句,这两条语句都必须放在构造方法的第一行,不能共存。 问题:子类对象创建的同时,父类对象创建了吗? 并没有创建。仅仅是在子类中持有一个能访问父类中成员的变量,即super。 总结编写具有继承关系的对象类:
多条语句使用一对大括号包裹起来,这样的格式就是代码块。代码块放在类中不同的地方有不同的含义,因此分为: 局部代码块 构造代码块 静态代码块 同步代码块(线程)
格式: { 代码 } 位置: 写在方法中 作用:控制局部变量的作用域 在块中定义的变量,出了块就不能再使用,因为出了块,该变量已消失。 在块外边定义了变量,在块中对该变量可以进行处理操作,出了块,该变量是处理后的结果。 在一个局部中 ,是可以定义多个局部块。
格式: { 代码 } 位置: 定义在类中,与成员变量和方法是平级的 作用: 用于给所有对象进行统一初始化,并且优先于构造方法来执行。 创建对象时执行。 在类中,可以定义多个构造块,执行顺序就是从上到下依次执行。
格式: static{ 代码; } 位置:类中,方法外 作用:用于给类或静态变量初始化。 当加载类时,某些动作需要此时完成,可以放在静态块中。 因为类只加载1次,因此,静态块也是只执行1次。 当类加载时就执行。 在类中,静态块也是出现多次的,执行顺序依次从上到下去执行。
含义是:最终的,最后的意思。 是一个修饰符,可以修饰变量、方法、类。 特点: 修饰类: 最终类,不能有子类,即不能被继承 格式:final class 类名{} 修饰方法: 最终方法,不能被重写 格式:final 返回值类型 方法名(参数列表){} 修饰变量: 既可以修饰成员变量,也可以修饰局部变量,都代表着是最终变量,不能改值。 因此被final修饰的变量就是常量。 常量: 字面值常量、 符号常量 格式: public/private static final 数据类型 常量名 = 数据; eg: public static final double MY_PI = 3.14;
复制代码: ctrl+alt+方向键上或下 移动代码: alt+方向键上或下 格式化代码: ctrl+shift+f 自动导包: ctrl+shif+o 删除: ctrl+d 注释: 单行注释添加和取消 : ctrl+/ 多行注释添加和取消: ctrl+shift+/ ctrl+shift+\