类的继承、方法的重写、匿名对象与抽象类

  如果多个类具有相同的属性和行为,那么,我们只需要把这些相同的部分提取出来,单独抽取到一个类里(父类);原有的这些类(子类)只要继承这个父类就好,不需要重复定义这些相同的属性和行为,但是在相同的部分也有一些差异,这时候我们就需要对这些差异性的行为进行修改如下图所示,老虎和兔子都有吃东西的行为,但是所吃的东西不同。修改的过程称为方法的重写,但是这些动物也有他们所特有的行为,我们在子类中补全这些特有的行为和属性,所需要的类就建好了。

一、继承

  1、定义:子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。

  2、特点:单继承与多层继承。一个子类只能有一个父类,但是一个父类可以有多个子类,同时父类也可以作为另一个类的子类。

  3、优点:提高了代码的复用性与维护性,让类与类之间产生了关系(多态的前提)。

  4、缺点:提高了代码的耦合性,(开发的原则为高内聚低耦合)

  5、继承关键字:extends     使用格式  : public  class  子类名   extends   父类名{  }

  6、this关键字:代表当前对象的引用,谁来调用我,我就代表谁

  7、super关键字:代表当前对象父类的引用

  8、this关键字和super关键字的区别

  • a:调用成员变量
    • this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
    • super.成员变量 调用父类的成员变量
  • b:调用构造方法
    • this(...)    调用本类的构造方法super(...)    
    • 调用父类的构造方法
  • c:调用成员方法
    • this.成员方法 调用本类的成员方法,也可以调用父类的方法
    •  super.成员方法 调用父类的成员方法

   9、继承中构造方法的注意事项

      • 子类中所有的构造方法默认都会访问父类中无参数的构造方法
      • 若父类中没有无参构造器,则需要手动在子类中加入父类的构造器
      • super(…)或者this(….)必须出现在构造方法的第一条语句上(两个构造方法只能存在一个)
      • 父类空间优先于子类对象的产生:   在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构 造方法调用时,一定先调用父类的构造方法

二、方法的重写

  1、什么是方法的重写:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。    子父类出现了一模一样的方法

  2、方法重写的注意事项:

    • style="list-style-type: none;">父类中私有方法不能被重写
    • style="list-style-type: none;">子类重写父类方法时,访问权限不能更低
    • style="list-style-type: none;">父类静态方法,子类也必须通过静态方法进行重写
    • style="list-style-type: none;">子类重写父类方法的时候,最好声明一模一样。

三、匿名对象

  1、什么是匿名对象:没有名字的对象

  2、匿名对象的特点:只能使用一次,调用完毕就是垃圾,被jvm的垃圾回收机制回收。(想要多次使用不能使用匿名对象)

  3、优点:节省代码

四、抽象类

  父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,除了声明还有意义,法主体已经没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类

  1、抽象方法的定义:修饰符 abstract 返回值类型 方法名 (参数列表);

  2、抽象类:含有抽象方法的类必须是抽象类,但抽象类不一定含有抽象方法

  3、抽象类的定义:public abstruct class 类名{  }

  4、注意事项:

    抽象类必须有子类实现,否则将失去意义,不能被创建对象

    抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。

    抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。

posted @ 2019-08-09 16:36  七月流星丶  阅读(522)  评论(0编辑  收藏  举报