百木园-与人分享,
就是让自己快乐。

01-继承和抽象类

继承和抽象类

1、继承

1.1、概念

​ 继承是将多个类的相同属性和行为抽取到一个单独的类中,只要继承单独这个类,即可使用这些属性和行为。

1.2、作用

  • 子类继承父类可以自动拥有父类中的属性和行为
  • 继承的出现减少了代码冗余,提高了代码的复用性
  • 继承的出现,更有利于功能的拓展

1.3、格式

  • public class 子类名 extends 父类名 {

    }

1.4、使用步骤

​ 将子类的共性内容抽取到父类中,先写父类,后写子类

1.5、注意事项

  • 父类的构造器不会继承到子类中
  • 父类私有的内容子类不能使用

1.6、继承的特点

1. 类只能单继承(即一个类只能有一个父类)
 2. 可以多层继承
  3. 个类不写父类会自动继承Object

1.7、继承后成员变量访问的特点

​ 就近原则

1.8、继承后成员方法访问的特点

​ 就近原则

1.9 继承后构造器访问的特点

  • 如果一个类不写构造器,那么Java编译器会自动添加一个无参构造器
  • 继承中构造器的访问特点
    • 子类中所有的构造器默认都会先访问父类中的无参构造器,再执行本类中的构造器
  • 子类无参构造器会调用父类无参构造器
  • 子类有参构造器调用父类的有参构造器

1.10 继承后的方法重写

​ 父类方法不能满足子类的要求,子类重新写一遍这个方法


2、抽象类

2.1、抽象方法介绍

​ 父类知道子类一定要完成某个功能,但是每个子类实现的情况都不一样,父类的该功能就可以定义成抽象方法。

2.2、抽象方法格式

  • 普通方法格式
    • 修饰符 返回值类型 方法名(参数列表){...}
  • 抽象关键字
    • abstract
  • 抽象方法的格式
    • public abstract 返回值类型 方法名(参数列表)
      • eg: public abstract void pay(int money)
    • 返回值类型前面添加 abstract
    • 方法体{},改成;
  • PS:抽象方法一定要放在抽象类中(即有抽象方法的类一定要声明称抽象类,抽象类可以没有抽象方法)

2.3、抽象类的格式

  • abstract class 类名{...}

2.4、抽象类的使用步骤

1. 定义类继承抽象类
  1. 重写抽象方法
  2. 使用子类对象

2.5、抽象类的思想

​ 抽象类是用来被继承的。抽象方法交给子类重写实现

  • PS:父类中抽象方法有必要存在吗
    • 父类不写抽象方法,子类也可以不写这个方法,不过会导致功能缺失

2.6、抽象类注意事项

    1. 抽象类不能创建对象
    2. 抽象类中有构造器,让构造器给成员变量赋值
    3. 抽象方法必须放在抽象类中,抽象类中可以没有抽象方法
    4. 子类必须重写抽象类中的所有抽象方法。如果子类只重写一部分抽象方法,子类必须声明为抽象类

2.7、模板模式步骤

  • 将固定的流程放到父类中
  • 将不同的细节由子类去实现

2.7 示例代码

卡片(父类)

// 卡片(父类)
public abstract class Card {
    private String name; //  名称
    private double balance; // 余额

    // 支付功能
    public void pay(int money) {
        System.out.println(\"输入用户名和密码\");
        System.out.println(\"登录成功\");
        // 扣款
        double newMoney = payment(money);
        System.out.println(\"消费额:\" + newMoney);
    }

    /**
     * 抽象的扣款功能
     * @param money 应付金额
     * @return 实际支付金额
     */
    public abstract double payment(int money);}

金卡(子类)

public class GoldCard extends Card {
    public GoldCard() {
    }

    public GoldCard(String name, double balance) {
        super(name, balance);
    }

    // 金卡打8折
    @Override
    public double payment(int money) {
        return money * 0.8;
    }
}

银卡(子类)

public class SilverCard extends Card {
    public SilverCard() {
    }

    public SilverCard(String name, double balance) {
        super(name, balance);
    }

    // 银卡打8.5折
    @Override
    public double payment(int money) {
        return money * 0.85;
    }
}

测试类

public class Demo03 {
    public static void main(String[] args) {
        GoldCard gc = new GoldCard();
        gc.pay(400);

        System.out.println(\"--------------------------------------\");

        SilverCard sc = new SilverCard();
        sc.pay(400);
    }
}

来源:https://www.cnblogs.com/OnlyOnYourself-lzw/p/16374628.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 01-继承和抽象类

相关推荐

  • 暂无文章