面向对象(二)-继承

面向对象(二)

面向对象-继承

类之间的关系

  1. 一个类作为另一类方法的参数,则称这两个类为依赖关系。(use-a)

  2. 一个类作为另一个类的属性,则称这两个类为组合关系。(has-a)

  3. 一个类的属性方法被另一个类全部继承,则称这两个类为父子关系(is-a)

继承/extends

格式:子类 extends 父类(基类、超类)

一. 访问修饰符在继承中

同包

子类可以直接访问父类中除了private修饰的,其他的属性或者方法

不同包
  1. 子类对象只能访问public修饰的方法

  2. 子类内部方法可以访问protected修饰的属性方法,但是不可以访问默认的属性方法

父类可以有多个子类,但父类不可访问子类元素的

子类只有一个父类,子类可以访问父类的元素

二.继承中的构造方法

  1. 子类创建时,默认调用父类的无参构造器

    如果父类中没有无参数的构造器,那么会在子类类名处报错

    解决办法

    1. 在父类中添加无参的构造方法

    2. super/超:在继承中super指代父类与this相似都需要放在第一行

      还可以通过super.xxx()调用父类的方法

三.转型

  1. 在继承关系中

  2. 应该有互相的引用

  3. 父类型转化为子类型,父中应该包括子的类型

    //父类 Animal  子类Dog
    Dog d = new Dog();
    Animal a = d;
    //以上为子、父之间的互相引用 、可以改变为 Animol a = new Dog();
    Dog c = (Dog)a;
    //父类型转化为子类型,父中应该包括子的类型

    在上述代码中,传递为引用传递,a、b、c同时指向同一个堆中的区域

    Animol a = new Animol();
    Dog d = (Dog)a;

    上述代码错误!,编译时不报错,在运行时报错

四.Object

所有类的根父类

Object中的方法:

.toString()

System.out.println()默认调用该方法

.equals()

在object中的equals方法是比较地址是否相同

如果我们需要重写可以参照String中的equals方法

.hashCoad()

获取当前对象的哈希值

抽象类

关键字:abstract

格式:

public abstract class 类名{}

抽象类的作用:

  1. 被继承 2. 被实现 3. 实现多态

    //A 抽象类    B实例化的子类
    //通过多态的方法调用
    A a = new B();

    特征:

    1. 不可创建对象(实例化),只是为了继承,但是存在构造方法

    2. abstract修饰的方法为抽象方法,以();作为结束。

      public abstract void 方法名();
    3. 抽象方法一定在抽类中

    4. 抽象方法不可以用private修饰,也不可以使用static、final修饰

    5. 实现抽象方法,在右边会出现白色的三角。

接口

关键字:interface

特点:

  1. 内部所有的方法默认都是公开抽象方法(省略时也是public abstract),

  2. Jdk 1.8之前,接口中只能有抽象方法

  3. 内部的所有变量都是静态常量/必须有初始值

接口继承接口 extends 一对多,通过“,”分割

类实现接口 implement 一对多,通过“,”分割

猜你喜欢

转载自www.cnblogs.com/-Archenemy-/p/11967579.html