JavaSE之面向对象编程-抽象类与接口

1.抽象类的定义与使用

定义:抽象类只是在普通类的基础上多扩充了一些抽象方法而已。
抽象方法:指的是只声明而未实现的方法,(没有方法体)

所有抽象方法要求使用abstract来定义,并且抽象方法所在的类也一定要使用abstract来定义,表示抽象类。

2.抽象类的使用原则

看一道例题:

abstract class A{
   
    public A(){
    //3.调用父类构造
        this.print() ; //4.调用被子类覆写的方法
    }
    public abstract void print() ;
}
class B extends A{
   
    private int num = 100 ;
    public B(int num) {
    //2.调用子类实例化对象
        super() ; //3.隐含一行语句,实际要先调用父类构造
        this.num = num ; //7.为类中属性初始化,30
    }
    public void print() {
    //5.此时子类对象的属性还没有被初始化
        System.out.println(this.num) ; //6.对应其数据类型的默认值,输出0
    }
}
public class Test{
   
    public static void main(String[] args) {
   
        new B(30).print(); //1.实例化子类对象
    }
}

调用过程:1234567
输出:
在这里插入图片描述
抽象类的使用原则:
a. 所有的抽象类必须有子类(abstract与final不能同时使用)
b. 抽象类的子类必须覆写抽象类的所有抽象方法(abstract与private也不能同时使用)
c. 抽象类要想创建实例化对象,必须通过子类向上转型为其实例化。(抽象类无法创建实例化对象)

abstract class Person {
   
    private String name;
    private String getName(){
   
        return name;
    }
    public abstract void fun();
}
class Student extends Person{
   
    public void fun(){
   
        System.out.println("子类继承抽象类");
    }
}

public class Test{
   
    public static void main(String[] args){
   
        Person per = new Student();
        per.fun();
    }
}

3.抽象类的相关规定

a. 抽象类也允许提供构造方法,并且子类也照样遵循对象实例化流程,先调用父类的调用方法而后调用子类构造方法

b. 抽象类中不允许定义任何的抽象方法,但抽象类依然无法直接创建实例化对象。

c. abstract与final不能一起用;abstract与private也不能一起用;

d. 内部抽象类(了解)
内部抽象类中也可以使用static定义来描述外部抽象类。如果现在外部抽象类中使用了static那么就是语法错误,但是内部抽象类允许使用static。

4.模板设计模式(封装算法)

-------基于抽象类,核心是封装算法。

看一个例子:
咖啡冲泡法

  1. 将水煮沸
  2. 用沸水冲泡咖啡
  3. 将咖啡倒进杯子
  4. 加糖和牛奶

茶冲泡法

  1. 将水煮沸
  2. 用沸水浸泡茶叶
  3. 把茶倒进杯子
  4. 加柠檬
class Coffee {
   
    /*
    咖啡冲泡法(算法)
     */
    void prepareRecipe() {
   
        boilWater();
        brewCoffeeGrings();
        pourInCup();
        addSugarAndMilk();
    }
    /**
     * 将水煮沸
     */
    // 重复代码
    public void boilWater() {
   
        System.out.println("Boiling Water");
    }
    /**
     * 冲泡咖啡
     */
    public void brewCoffeeGrings() {
   
        System.out
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值