美文网首页
3/2day01_封装_继承

3/2day01_封装_继承

作者: 蹦蹦跶跶的起床啊 | 来源:发表于2020-03-02 15:44 被阅读0次

面向对象

今日思维导图


定义一个类

格式:

public class 类名{
    //成员变量
    数据类型  成员变量名;
    //成员方法
    public 返回值类型 方法名(参数列表){
            方法体;
            return 返回值;
    }
}

创建一个对象

  类名 对象名 = new 构造方法名();

封装

  • 步骤
    a. 给成员变量加上权限修饰符, private
    b. 给对象类采用get和set方法

构造器

  • 作用
    给创建出的对象的成员变量初始化
  • 格式
public 类名(){

}
public 类名(参数列表){

}

this关键字

  • this 代表
    成员方法由哪个对象调用, 方法中的this代表哪个对象
  • 使用场景
    a. set方法中给重名的成员变量赋值
    b. 在构造方法中使用this, 给同名的成员变量赋值

匿名对象

  • 是指 new对象, 但是不使用对象名 来接收
    匿名对象: new Dog();

  • 场景
    当一个对象只使用一次时,就可以选择使用匿名对象

继承

概念

在一个已知类A的基础上, 创建新类B的过程

类A成为父类/基类/超类/SuperClass
类B成为子类/派生类/SubClass

格式

public class  父类{
    //成员变量
    //成员方法
}

public class 子类 extends 父类{
    // 子类中自动继承父类中的成员变量和成员方法
    // 子类中也可以添加自己的成员变量和成员方法
}

好处

a. 提高代码复用性
b. 类与类之间有了关系, 为多肽提供前提

子类不能继承的东西

a. 父类的构造方法无法继承,(因为构造方法和类名是一样的)
b. 父类的私有成员,子类可以继承但是不能直接访问.

继承后的特点- 成员变量

a. 当子父类的成员变量不同名时, 访问成员变量是没有歧义的.
b. 当子父类的成员变量同名时, 会根据就近原则,优先访问子类中的成员变量
c. 如果想要访问父类中的成员变量,需要加super关键字 ,super就代表从父类中找
super 在哪个类中 , 就是去找该类的父类. 最好在子类中使用

继承后的特点- 成员方法

a. 当子父类的成员方法不同名时, 调用成员方法是没有歧义的.
b. 当子父类的成员方法同名时, 使用子类对象调用该方法, 根据就近原则, 优先调用子类自己的成员方法.
c. 无法在main中使用 子类对象名.super.成员方法调用父类中成员方法的, 需要在子类中使用super

重写的概念和应用

  • 方法的重载
    方法名相同,参数列表不同(类型或个数不同)
  • 方法的重写
    在继承关系中,子类中出现了一个和父类除了方法体,其他一模一样的方法,称为方法的重写
  • 方法重写的应用
    当在子类中发现父类中的方法不适用的时候, 可以进行重写

@Override重写注解

@Xxx 称为注解, 英文名 Annotation

@Override 此注解叫做方法重写注解,
作用是用来检查重写的方法是否格式正确,
这个注解标记的方法,就说明这个方法必须是重写父类的方法,否则编译阶段报错。
如下:

public class Cat extends Animal {
     // 声明不变,重新实现
    // 方法名称与父类全部一样,只是方法体中的功能重写写了!
    @Override
    public void cry(){
        System.out.println("我们一起学猫叫,喵喵喵!喵的非常好听!");
    }
}

注意事项

  1. 方法重写是发生在子父类之间的关系。
  2. 子类方法覆盖父类方法,必须要保证子类方法权限大于等于父类方法权限(子类大于等于父类,一般来说写一样的权限)。
    public >protevted> 不写(默认|default)> private
  3. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样
  4. 子类不能重写父类的私有方法和静态方法。

继承后的特点 - 构造器

  • 子类无法继承父类的构造方法, 因为构造方法和类名一致,
  • 在子类的任何方法的第一行,默认有一个 super(). 表示调用父类的无参构造方法,父类成员变量初始化后,才可以给子类使用。
  • 子类构造器执行的时候,都会在第一行默认先调用父类无参数构造器一次。
  • 子类构造器的第一行都隐含了一个super()去调用父类无参数构造器,super()可以省略不写。
  • 子类如果想要手动调用父类有参构造, 可以自己添加super(父类形参);写在子类构造方法中

super和this

父类空间优先于子类对象产生


this(参数)也必须写在构造方法的第一行, 所以this(参数)和super(参数)只能出现一个
this可以调用本类构造方法(减少重复代码)
如图



super和this的共同使用


小结

  • 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的
    super()。
  • super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
  • super(..)和this(...)是根据参数去确定调用父类哪个构造器的。
  • super(..)可以调用父类构造器初始化继承自父类的成员变量的数据。
  • this(..)可以调用本类中的其他构造器。

java继承的特点

  1. Java只支持单继承,不支持多继承。
  2. 一个类可以有多个子类。
  3. 可以多层继承。

抽象类

抽象类的概念

我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。

  • 抽象方法 : 没有方法体的方法。
  • 抽象类:包含抽象方法的类。

abstract使用格式

abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类。

抽象方法

  • 原因
    因为父类不知道子类的具体如何操作, 所以需要写出一个抽象方法来形容概括子类行为.
  • 定义格式:
    修饰符 abstract 返回值类型 方法名 (参数列表);
  • 代码举例:
    public abstract void run();
  • 在父类中定义了抽象方法后, 在子类中重写该抽象方法就可以了

抽象类

定义格式:
abstract class 类名字 {

}

**注意:

  • 抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。
  • 抽象类不能创建对象,天生就是父类, 只能给别人继承.
  • 需要在子类中重写所有抽象方法之后,该子类才能创建对象

抽象类的特征和注意事项

特征:
有得:抽象类得到了拥有抽象方法的能力。
有失:抽象类失去了创建对象的能力。
其他成员(构造器,实例方法,静态方法等)抽象类都是具备的。

注意事项:
1.抽象类不能创建对象
2.抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
5.抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。

抽象类的存在意义

抽象类体现的是模板思想
便于继承

继承图解

相关文章

  • 3/2day01_封装_继承

    面向对象 今日思维导图 定义一个类 格式: 创建一个对象 封装 步骤a. 给成员变量加上权限修饰符, privat...

  • java基础-面相对象的特性

    1.封装 2.继承 3.多态

  • 面向对象

    三大特性1.封装2.继承3.多态 封装:安全性;隐藏实现细节;提高复用性继承:扩展 权限修饰符: 继承 父类的引用...

  • JS继承

    1.基本原型链继承 2.封装成方法的原型链继承 3.call\apply继承

  • Python基础-day12

    list ​ 封装 ​ 继承 面向对象的三大特性 ​ 封装 继承 多态 封装 ​ 生活里 ​ ...

  • OC基础-----> 初始化方法

    A ----> 继承概要 1)面对对象的三大特性:封装、继承、多态 2)继承即能保证类的完整, 又能简化代码 3)...

  • 面向对象

    一.三大特征:1.封装: 把数据封装起来,不让外面随便访问2,继承: 子类继承父类,有共同点3.多态: ...

  • 面向对象

    一.三大特征: 1.封装: 把数据封装起来,不让外面随便访问 2,继承: 子类继承父类,有共同点 3.多态: 事物...

  • 关情纸尾---OC-面向对象的三大特性

    面向对象的三大特性 封装 继承 多态 一、封装 1、set方法 2、get方法 3、封装的好处 4、self关键字...

  • iOS开发之一OC语言的特性

    三大特性:封装、继承、多态 一、封装(成员变量的封装) 二、继承 三、多态(多种形态)

网友评论

      本文标题:3/2day01_封装_继承

      本文链接:https://www.haomeiwen.com/subject/ponukhtx.html