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

本文介绍了Java中的继承概念和特点,包括单继承、构造代码块、final关键字的使用,以及Eclipse的常用快捷键。重点讲解了继承带来的类成员变化,如this和super的区别,方法重载和重写的原则,以及代码块的作用和分类。
摘要由CSDN通过智能技术生成

继承(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+\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值