美文网首页
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_封装_继承

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