(继承,代码块,final,快捷键)2020.10.21

it2024-12-07  13

目录

继承(extends)继承出现后,类中成员的变化this和super方法重载(overload)方法重写(override) 代码块局部代码块构造代码块静态代码块 final关键字eclipse快捷键

继承(extends)

概念: 从一个类中衍生出(派生出)其他类的过程  原有的类: 父类、超类、基类  其他类: 子类 、派生类 好处:  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

这两个关键字的用法是相同的   区别是   this:代表的是当前类对象自己的引用,可以访问属性和方法 (子类中和父类中)      调用重载的构造方法,必须写在第一行   super:代表的是当前类对象的父类的引用,可以访问属性和方法(父类中的)       调用构造方法,必须写在第一行(父类)   注意:“就近原则” 方法:  当子类中和父类中出现了相同的方法声明,但是方法体不同,创建子类对象,调用该方法运行的是子类中的方法体内容,这种现象称之为叫做:方法的重写(覆盖)。

方法重载(overload)

在一个类中,方法名相同,参数列表不同,与返回值类型无关。    参数列表不同: 个数、顺序、类型

方法重写(override)

在子类中,对父类中的方法进行重写。    重写前提:     1.方法声明要与父类中的方法声明一致     2.访问权限修饰符大于等于父类的权限     3.可以通过注解@Override来验证是否是重写方法,不是则会在编译时期报错     该注解写在重写方法的上边(写在子类中)     4.jdk5.0版本后,允许重写的返回值类型是父类方法返回值类型的子类     即:返回值类型可以小于等于父类     5.私有方法不重写     为什么要重写?     父类方法的方法体不满足于子类的需求,有想要保留该方法的声明,因此进行重写。     想要在子类中调用父类中的方法,使用关键字super,格式:super.方法名();    构造方法:   当创建子类对象时,发现父类的构造方法也执行了,原因时在子类构造方法的第一行有一条隐藏的 super(); 语句,该语句的作用就是去调用父类中的无参数的构造方法。   如果父类中没有无参数的构造方法,那么子类必须在构造方法的第一行显示写出super(参数) 这样的动作目的就是为了让父类的构造方法先执行,即父类的属性先进行初始化。   在子类中定义的重载形式的构造方法中,使用this(参数) 语句调用了其他构造方法,那么这个构造方法的中不能出现super()语句,这两条语句都必须放在构造方法的第一行,不能共存。 问题:子类对象创建的同时,父类对象创建了吗?  并没有创建。仅仅是在子类中持有一个能访问父类中成员的变量,即super。 总结编写具有继承关系的对象类:

代码块

多条语句使用一对大括号包裹起来,这样的格式就是代码块。代码块放在类中不同的地方有不同的含义,因此分为:  局部代码块  构造代码块  静态代码块  同步代码块(线程)

局部代码块

格式:  {   代码  }  位置: 写在方法中  作用:控制局部变量的作用域  在块中定义的变量,出了块就不能再使用,因为出了块,该变量已消失。  在块外边定义了变量,在块中对该变量可以进行处理操作,出了块,该变量是处理后的结果。  在一个局部中 ,是可以定义多个局部块。

构造代码块

格式:  {   代码  }  位置: 定义在类中,与成员变量和方法是平级的  作用: 用于给所有对象进行统一初始化,并且优先于构造方法来执行。     创建对象时执行。  在类中,可以定义多个构造块,执行顺序就是从上到下依次执行。

静态代码块

格式:  static{    代码;  }  位置:类中,方法外  作用:用于给类或静态变量初始化。    当加载类时,某些动作需要此时完成,可以放在静态块中。    因为类只加载1次,因此,静态块也是只执行1次。    当类加载时就执行。  在类中,静态块也是出现多次的,执行顺序依次从上到下去执行。

final关键字

含义是:最终的,最后的意思。 是一个修饰符,可以修饰变量、方法、类。 特点:  修饰类: 最终类,不能有子类,即不能被继承      格式:final class 类名{}  修饰方法: 最终方法,不能被重写      格式:final 返回值类型 方法名(参数列表){}  修饰变量:    既可以修饰成员变量,也可以修饰局部变量,都代表着是最终变量,不能改值。    因此被final修饰的变量就是常量。  常量:    字面值常量、 符号常量      格式:       public/private static final 数据类型 常量名 = 数据;       eg: public static final double MY_PI = 3.14;

eclipse快捷键

复制代码: ctrl+alt+方向键上或下 移动代码: alt+方向键上或下 格式化代码: ctrl+shift+f 自动导包: ctrl+shif+o 删除: ctrl+d 注释: 单行注释添加和取消 : ctrl+/    多行注释添加和取消: ctrl+shift+/ ctrl+shift+\

最新回复(0)